我尝试在我的程序中使用G1GC。程序在不同内存大小的机器上使用: 1Gb内存的VPS (最小),8Gb内存的桌面,32 1Gb内存的DS (最大)。我注意到,即使有大量空闲内存,G1GC也不会保留更多内存(例如,G1GC在我的机器上保留的内存不超过3Gb,总容量为8Gb / 4Gb )。
我想要一个通用的解决方案。我不能为每种类型的机器创建单独的版本或单独的运行脚本。
发布于 2016-03-06 11:25:18
我认为你选择了错误的垃圾收集算法。Java 8文档提供了这个指导:
选择收集器 除非应用程序有相当严格的暂停时间要求,否则首先运行应用程序并允许VM选择收集器。如果有必要,调整堆大小以提高性能。如果性能仍然不符合您的目标,那么使用以下准则作为选择收集器的起点。
-XX:+UseSerialGC选项的串行收集器。-XX:+UseSerialGC的串行收集器。-XX:+UseParallelGC选择并行收集器。-XX:+UseConcMarkSweepGC或-XX:+UseG1GC选择并发收集器。来源:选择收集器
根据您的评论,您的目标似乎是获得最佳性能,即尽量减少用于GC和相关管理费用的总时间。
这意味着你最好的选择是:
如果您想要一个适合所有脚本的脚本,而不管硬件如何工作,那么性能目标方法是最好的,尽管这意味着您将无法使用特定于平台的设置来(潜在地)改进JVM的决策。
https://stackoverflow.com/questions/35824572
复制相似问题