java 6中的默认GC安排是什么? (1.6.0-25)

时间:2013-09-24 11:21:12

标签: java garbage-collection

我想知道GC在Java 6(64位)计算机上运行的默认计划是什么?我知道它可以在没有任何时间表的情况下触发,但仍然是什么是默认行为?

我不知道java是否与-server选项一样运行。我该怎么检查?我没有在java进程命令中看到它(当我做'ps ax | grep java'时),但是,它仍然可以在服务器模式下运行吗?它取决于安装的jvm还是物理服务器的类型?请让我知道我怎么知道这一点。

3 个答案:

答案 0 :(得分:3)

首先,要打印所有默认JVM设置,请使用:java -XX:+PrintFlagsFinal -version

默认情况下,JVM Hotspot以-client模式运行。

启动脚本-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log时,可以使用以下参数来获取包含VM启动时设置的所有属性/参数的日志。

关于GC,默认值由JVM人体工程学确定,请参阅Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning。简而言之:

  

如果未在命令行中另行设置,则根据计算机上的内存量计算初始和最大堆大小,默认最大堆大小不会超过1GB < / strong>,无论机器上安装了多少内存。

在同一文档中,所选的GC算法取决于硬件设置,VM将在串行并行收集器之间做出决定。要查看最终运行的是哪一个,请启用GC日志记录。

而且,您应该查看以下问答:How is the default java heap size determined?

答案 1 :(得分:2)

有关垃圾收集器的信息:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

如果您想知道您的VM是否以服务器模式运行:

java -version

然后寻找类似的东西:

  

Java HotSpot(TM)64位服务器VM(...)

答案 2 :(得分:2)

如果您正在创建10 MB /秒的垃圾并且您有100 MB的Eden空间,则需要10秒才能填满,您将每隔10秒看到一次GC。减少垃圾消耗或使Eden空间更大,集合之间的间隔也会更长。

默认计时器为一小时,称为“DGC”。如果一小时内没有收集,可以触发完整的GC来清理任何分布式对象。我通常将此设置为一周。

默认值为

-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000

BTW当我设计低延迟系统时,我使Eden空间大于一天中创建的垃圾量。当系统未被使用时,我每天在代码中触发一次完整的集合。通过这种方式,您可以在白天看到没有收藏品,次要或主要收藏品。

以下是Java中真正的低延迟交易系统的一个例子。

http://vanillajava.blogspot.com/2011/06/how-to-avoid-garbage-collection.html

BTW Java 6更新25现在已经很老了,如果不是Java 7更新40,我会考虑Java 6更新45。