首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1上的Java7(JDK7)垃圾收集和文档

G1上的Java7(JDK7)垃圾收集和文档
EN

Stack Overflow用户
提问于 2011-11-13 19:50:30
回答 8查看 100.3K关注 0票数 82

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

我的问题:

  1. 是G1是Java7中的默认收集器,如果不是,如何激活g1?
  2. g1在Java7中有哪些可选设置?
  3. 在Java7中对其他收集器(如cms或并行收集器)进行了任何更改吗?
  4. 在哪里可以找到有关Java7中垃圾收集的好文档?
EN

回答 8

Stack Overflow用户

发布于 2011-11-17 09:53:22

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

代码语言:javascript
复制
> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java 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收集器:

代码语言:javascript
复制
> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseG1GC -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
java 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.

我不知道你在哪里能找到好的文档。

票数 47
EN

Stack Overflow用户

发布于 2012-05-10 22:19:29

甲骨文终于在Java7 U4中正式发布了G1: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中的并行收集器。

票数 31
EN

Stack Overflow用户

发布于 2011-11-13 19:56:41

是的,G1是Java1.7JVM中新的标准垃圾收集器。

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

使用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时,与其他HotSpot GC相比,G1非常冗长。这是因为它打印每个GC线程的计时和其他信息,这些信息对分析和故障排除非常有帮助。如果您想要更简洁的GC日志,请切换到使用-verbosegc (但建议获取更详细的GC日志)。

我也发现this文章对理解G1的内幕很有帮助。

更多信息here

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8111310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档