为了账号安全,请及时绑定邮箱和手机立即绑定

关于G1的Java 7(JDK 7)垃圾收集和文档

/ 猿问

关于G1的Java 7(JDK 7)垃圾收集和文档

慕斯卡3215842 2019-08-12 11:13:27

关于G1的Java 7(JDK 7)垃圾收集和文档

Java 7已经出现了一段时间了,但我找不到任何关于垃圾收集器配置的好资源,特别是新的G1收集器

我的问题:

  1. G1是Java 7中的默认收集器,如果不是,我如何激活G1?

  2. g7在Java7中有哪些可选设置?

  3. 是否对Java 7中的其他收集器(如cms并行收集器)进行了更改?

  4. 在哪里可以找到有关Java 7中垃圾收集的好文档?


查看完整描述

3 回答

?
白衣非少年

G1垃圾收集器不是我安装的Java版本1.7.0_01中的默认值。您可以通过使用一些额外的命令行选项来自己查看:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGCjava version "1.7.0_01"Java(TM) SE Runtime Environment (build 1.7.0_01-b08)Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)Heap
 PSYoungGen      total 37696K, used 1293K [0x00000007d5eb0000, 0x00000007d88c0000, 0x0000000800000000)
  eden space 32320K, 4% used [0x00000007d5eb0000,0x00000007d5ff3408,0x00000007d7e40000)
  from space 5376K, 0% used [0x00000007d8380000,0x00000007d8380000,0x00000007d88c0000)
  to   space 5376K, 0% used [0x00000007d7e40000,0x00000007d7e40000,0x00000007d8380000)
 PSOldGen        total 86144K, used 0K [0x0000000781c00000, 0x0000000787020000, 0x00000007d5eb0000)
  object space 86144K, 0% used [0x0000000781c00000,0x0000000781c00000,0x0000000787020000)
 PSPermGen       total 21248K, used 2032K [0x000000077ca00000, 0x000000077dec0000, 0x0000000781c00000)
  object space 21248K, 9% used [0x000000077ca00000,0x000000077cbfc288,0x000000077dec0000)

您不需要启用实验选项来打开G1收集器,但是:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseG1GC -version-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocationjava version "1.7.0_01"Java(TM) SE Runtime Environment (build 1.7.0_01-b08)Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)Heap
 garbage-first heap   total 130048K, used 0K [0x000000077ca00000, 0x0000000784900000, 0x00000007fae00000)
  region size 1024K, 1 young (1024K), 0 survivors (0K)
 compacting perm gen  total 20480K, used 2032K [0x00000007fae00000, 0x00000007fc200000, 0x0000000800000000)
   the space 20480K,   9% used [0x00000007fae00000, 0x00000007faffc288, 0x00000007faffc400, 0x00000007fc200000)No shared spaces configured.

我不知道在哪里可以找到任何好的文档。


查看完整回答
反对 回复 2019-08-12
?
饮歌长啸

Oracle最终在Java 7 U4中取得了官方成绩:http: //www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html

说明:http: //docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

命令行选项:http: //www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options

尽管如此,我认为它不是Java 7中的默认收集器。对于服务器,默认情况下是Java 6中的并行收集器。


查看完整回答
反对 回复 2019-08-12
?
潇潇雨雨

是的,G1是Java 1.7 JVM中的新标准垃圾收集器。

在这里,您可以找到有关如何使用和配置新垃圾收集器的大量信息:

使用G1 G1仍然被认为是实验性的,可以使用以下两个参数启用:

-XX:+ UnlockExperimentalVMOptions -XX:+ UseG1GC

要设置GC暂停时间目标,请使用以下参数:

-XX:MaxGCPauseMillis = 50(暂停时间目标为50ms)

对于G1,可以指定一个时间间隔,在此期间GC暂停应该持续不超过上面给出的时间:

-XX:GCPauseIntervalMillis = 200(暂停间隔目标为200ms)

请注意,上述两个选项代表目标,而不是承诺或保证。它们可能在某些情况下运行良好,但在其他情况下则不然,GC可能无法始终遵守它们。

或者,可以明确指定年轻一代的规模以影响疏散暂停时间:

-XX:+ G1YoungGenSize = 512m(年轻一代512兆)

G1还使用幸存者空间的等价物,当然,幸存者空间是一组(可能是非连续的)区域。它们的大小可以用通常的参数指定(例如,-XX:SurvivorRatio = 6)。

最后,要充分发挥G1的作用,请尝试设置默认情况下当前禁用的这两个参数,因为它们可能会发现罕见的竞争条件:

-XX:+ G1ParallelRSetUpdatingEnabled -XX:+ G1ParallelRSetScanningEnabled

还有一点需要注意的是,当设置-XX:+ PrintGCDetails时,G1与其他HotSpot GC相比非常冗长。这是因为它打印每个GC线程时序和其他信息非常有助于分析和故障排除。如果您想要更简洁的GC日志,请切换到使用-verbosegc(尽管建议获取更详细的GC日志)。

我也发现这篇文章对于理解G1的内部非常有帮助。


查看完整回答
反对 回复 2019-08-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信