Java PMD内存泄漏
在windows上的eclipse中使用pmd时,我有一个严重的内存泄漏。我导入了一堆大型maven项目。m2e和编译PMD启动后。然后,对于工作区中的许多(大约50个)项目,它最终在大约8-10个eclipse作业实例中并行运行。然后进程的大小会无限增长,直到机器上的虚拟内存耗尽(大约12GB),PC完全冻结 eclipse.ini中的我的内存配置:Java PMD内存泄漏,java,windows,eclipse,pmd,java-memory-leaks,Java,Windows,Eclipse,Pmd,Java Memory Leaks,在windows上的eclipse中使用pmd时,我有一个严重的内存泄漏。我导入了一堆大型maven项目。m2e和编译PMD启动后。然后,对于工作区中的许多(大约50个)项目,它最终在大约8-10个eclipse作业实例中并行运行。然后进程的大小会无限增长,直到机器上的虚拟内存耗尽(大约12GB),PC完全冻结 eclipse.ini中的我的内存配置: -Xms256m -Xmx2G -Xss2m -Xverify:none -XX:+UseG1GC -XX:+UseStringDeduplic
-Xms256m
-Xmx2G
-Xss2m
-Xverify:none
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XX:MaxMetaspaceSize=1G
这里2GB的堆大小限制似乎没有多大影响。然后我怀疑分配的vm内存不是java堆,而是类装入器元空间或来自本机dll
我的机器上有32GB内存。使用java 1.8.0_121
这是一个vmmap快照,在进程变得危险的大之前不久,我必须杀死它:
我尝试对进程运行jcmd PID GC.class_stats
,但我看不出这里有什么问题,因为总字节数只有~1.4 GB:
1636:
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
1 89 141004480 560 0 1296 7 149 2176 880 3464 4344 java.util.HashMap$Node
2 -1 131125856 480 0 0 0 0 0 24 584 608 [I
3 89 129135744 624 0 8712 94 4623 58024 12136 56304 68440 java.lang.String
4 -1 111470376 480 0 0 0 0 0 24 584 608 [B
5 -1 94462520 480 0 0 0 0 0 24 584 608 [C
6 -1 55019976 480 0 0 0 0 0 32 584 616 [Ljava.util.HashMap$Node;
7 -1 53828832 480 0 0 0 0 0 24 584 608 [Ljava.lang.Object;
8 89 51354560 504 0 9016 42 2757 23352 6976 26704 33680 java.net.URL
9 89 48028392 504 0 544 1 20 496 216 1520 1736 java.util.LinkedList$Node
10 28783 40910880 1000 0 6864 51 3951 35648 8664 35792 44456 java.util.HashMap
...snip...
48234 48225 0 608 0 288 2 10 288 160 1152 1312 sun.util.resources.en.CalendarData_en
48235 48225 0 608 0 360 2 27 304 200 1200 1400 sun.util.resources.en.CurrencyNames_en_US
48236 48225 0 608 0 288 2 10 288 160 1152 1312 sun.util.resources.en.LocaleNames_en
48237 48229 0 608 0 288 2 10 304 176 1152 1328 sun.util.resources.en.TimeZoneNames_en
48238 29013 0 520 0 272 2 5 592 160 1352 1512 sun.util.spi.CalendarProvider
48239 89 0 512 0 336 3 5 440 240 1184 1424 sun.util.spi.XmlPropertiesProvider
48240 89 0 560 0 440 5 16 760 488 1504 1992 sun.util.xml.PlatformXmlPropertiesProvider$EH
48241 89 0 528 0 1040 3 71 520 464 1840 2304 sun.util.xml.PlatformXmlPropertiesProvider$Resolver
48242 89 0 552 0 520 3 19 512 456 1392 1848 uescape.view.UnicodeEscapeView$1
48243 89 0 552 0 520 3 19 512 456 1392 1848 uescape.view.UnicodeEscapeView$2
1374367440 32457872 432408 90295960 502480 22001616 144854704 85034192 198366896 283401088 Total
485.0% 11.5% 0.2% 31.9% - 7.8% 51.1% 30.0% 70.0% 100.0%
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
我没有太多在Windows上评测本机进程的经验。我如何确定是什么在无休止地分配这么多内存?这确实是pmd eclipse插件的问题。 看 最新版本包含修复程序
可通过更新站点获取该信息:您有哪个版本?使用PMD eclipse插件4.0.15、PMD 5.3.5和maven PMD插件3.6,检查PMD和插件的bug跟踪器是否存在已知问题(例如)。我看到现在所有的都有些过时了,可能需要升级,特别是pmd本身,我只需要检查一下与氧气2的兼容性。Eclipse Marketplace的链接似乎没有最新的pmd Eclipse插件:@scorciatoia不要担心Eclipse Marketplace-只需使用您评论中的链接从github下载pmd Eclipse插件的4.0.17版即可。4.0.17不是一个版本;-)我将pmd eclipse插件升级到4.0.16.v20180412-0833,其中包含pmd 6.2.0,但没有帮助。