我正在研究Netbeans平台模块(准确的jMonkeyEngine插件),其中我使用JavaFX构建UI,TopComponent中的JFXPanel显示Javafx内容。我创建了一个新的Netbeans FileType,JavaFX UI用于修改与FileType关联的DataObject的内容。最近我的应用程序由于Out Of Memory:Permgen Space错误而开始崩溃,我无法精确定位导致它的确切代码,因为每次发生这种情况时堆栈跟踪指向不同的线程和代码行。我尝试使用-XX:MaxPermSize = 1g命令行开关将我的PermGen空间增加到1 GB,但它没有解决问题。因此,我使用Netbeans Profiler来分析我的应用程序以查找任何内存泄漏,但我对分析探查器输出/堆转储完全不熟悉。如上所述,每次发生错误时,堆栈跟踪和堆转储指向不同的线程和不同的代码行(有时是我为插件编写的那个,有时是通过Netbeans Platform API提供的那些代码#39 ; S)。所有堆转储分析中唯一常见的事情是VM遥测图中的堆大小和使用的堆空间之间的差异突然增加,并且GC中的“时间花费”也是如此。从0-3%立即升至100%。以下是一些截图: screenshot 1, screenshot 2
当应用程序崩溃时,您还可以看到堆大小(最左边的遥测图中的红色区域)上升到-XX:MaxPermSize中指定的最大值。
这是否意味着应用程序中存在内存泄漏?如果是这样,我怎样才能检测到它,因为每次出现错误的来源都不同?
以下是我正在使用的命令行:-J-Xms32m -J-Xmx256m -J-XX:PermSize = 512m -J-XX:MaxPermSize = 1g -J-XX:MaxDirectMemorySize = 2048m。