我有一个内存问题的应用程序,所以我开始使用分析器,比如 VisualVM。
如果我在调试中启动我的应用程序并到达断点(暂停应用程序),我仍然会看到许多正在创建的几个类的实例(主要是int
, char
, Object
, TreeMap$Entry
, ...)。
这是为什么?
我有一个内存问题的应用程序,所以我开始使用分析器,比如 VisualVM。
如果我在调试中启动我的应用程序并到达断点(暂停应用程序),我仍然会看到许多正在创建的几个类的实例(主要是int
, char
, Object
, TreeMap$Entry
, ...)。
这是为什么?
断点可能只暂停了命中它的线程,而其他线程则愉快地继续执行其预期的工作。要了解它们的作用,它们的名称可能会透露一些信息,但没有什么比线程转储更好的了(你可以让 VisualVM 为你做)。
此外,您通常可以为单个断点决定是只挂起一个线程,还是挂起所有线程。当然,具体如何执行此操作是特定于 IDE 的(但通常在“断点属性”或类似的地方)。
大多数java应用程序都有很少的线程。至少两个:Main Application Thread 和 GC(garbage collector) 线程。
当您调试应用程序并在断点处停止时,您总是(主要是排除 Web 和多交易应用程序)只停止一个线程。同样在调试模式下可以添加一些额外的线程。