gpt4 book ai didi

java - PMD 内存泄漏

转载 作者:行者123 更新时间:2023-12-02 11:21:51 26 4
gpt4 key购买 nike

我在 Windows 上的 Eclipse 中使用 pmd 时出现严重的内存泄漏。我导入了一堆大型 Maven 项目。 m2e 和编译后 PMD 启动。然后,它最终在工作区中的许多(大约 50 个)项目中并行运行大约 8-10 个 Eclipse 作业实例。然后进程大小无限增长,直到机器上的虚拟内存耗尽(大约 12 GB 左右)并且 PC 完全卡住。

我在 eclipse.ini 中的内存配置:

-Xms256m
-Xmx2G
-Xss2m
-Xverify:none
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XX:MaxMetaspaceSize=1G

此处 2 GB 的堆大小限制似乎没有太大影响。我怀疑分配的虚拟机内存不是java堆,而是类加载器元空间或来自 native dll。

我的机器上有 32 GB RAM。使用java 1.8.0_121。

这是进程变得非常大并且我必须杀死它之前不久的 vmmap 快照:

memory snapshot

我尝试针对该进程运行 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 上分析 native 进程的经验。我如何确定是什么无休止地分配了这么多内存?

最佳答案

这确实是pmd-eclipse-plugin的问题。请参阅https://github.com/pmd/pmd-eclipse-plugin/issues/52

最新版本4.0.17.v20180801-1551包含修复程序。

可通过更新站点获取:https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates/

关于java - PMD 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com