Java 8分配的内存太多

我使用Java 7 JRE运行Eclipse 4.3。当我升级到Java 8 JRE时,Eclipse突然消耗更多的内存。如果我使用JRE 7直接启动Eclipse到我的工作区,它会根据任务管理器分配600 MB的RAM。当我使用JRE 8,这个值是750 MB。

更糟的是,如果我运行一个大型Java程序,通常使用JRE 7分配大约10 GB的RAM,切换到JRE 8会导致它分配12 GB的RAM。

有人知道什么导致这额外的RAM分配?我已经测试了调整不同的选项,但没有成功:

-XX:ReservedCodeCacheSize=
-XX:MaxMetaspaceSize=
-XX:MetaspaceSize=
...
问题是问的

why Java 8 allocating too much memory on my machine

我认为没有人能够回答,但是有几个指南可能有帮助。鉴于您通过任务管理器测量内存,您对使用的总RSS感兴趣。所以

>步骤1:
比较您正在运行的版本之间的JVM默认值。你可以使用两个jdks的java -XX:UnlockDiagnosticVMOptions -XX:PrintFlagsFinal -version命令获取它们。在输出上使用文本排序,您将能够使用任何比较工具获得一个很好的差异。像更改默认GC收集器和线程堆栈大小的事情将影响最终的RSS很多。
>步骤2:
测量每个内存池的分配。一般来说,java使用的总内存可以使用heap metasize code cache native(thread_stack_size * maximum_number_of_threads)

>通过成熟的工具(Eclipse Memory AnalyzerVisualVM等),堆内存容易测量(可以很容易比较!!)。如果你记忆
增加堆积面积 – 你非常幸运。在额外的visual vm允许你安装插件,将显示通过jmx访问的所有内存池的值。
> metasize(aka permgen in jdk <8)应该更多/更少相等,并且可以用jmap工具找到。不需要玩标志,你可以得到数字,只是比较,当它增加或不。
> Code cache:除了保留代码缓存,你可以设置初始代码缓存(这将影响使用多少RSS)。
> native:这是一只黑羊。如果所有其他内存池是相等的(你的内存块是2GB)内存丢失必须在本机区域的某个地方。我知道的唯一工具是jcmd,它有大量的文档在oracle docs。

非技术 – 虽然调整各种选项,以减少记忆可以帮助,获得正确的价值观的机会接近找到针在干草堆。我真的建议有一个关于如何使用RSS在Java中。这个知识将会很方便的相当几年!

请让我知道,当你想要更具体的参考或更好的解释。和…祝你的任务;-)

http://stackoverflow.com/questions/32461309/java-8-allocating-too-much-memory

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java 8分配的内存太多