我想知道什么是在java 6(64位)机器上运行的默认时间表GC?我知道它可以在没有任何时间表的情况下被触发,但是,仍然会是什么样的默认行为?java 6中GC的默认时间表是什么? (1.6.0-25)
我不知道java是否像-server选项那样运行。我如何检查?我没有在java进程命令中看到它(当我做'ps ax | grep java')时,但仍然可以在服务器模式下运行吗?它依赖于安装的jvm还是物理服务器的类型?请让我知道我怎么知道这一点。
我想知道什么是在java 6(64位)机器上运行的默认时间表GC?我知道它可以在没有任何时间表的情况下被触发,但是,仍然会是什么样的默认行为?java 6中GC的默认时间表是什么? (1.6.0-25)
我不知道java是否像-server选项那样运行。我如何检查?我没有在java进程命令中看到它(当我做'ps ax | grep java')时,但仍然可以在服务器模式下运行吗?它依赖于安装的jvm还是物理服务器的类型?请让我知道我怎么知道这一点。
信息关于垃圾收集器:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
如果你想知道,如果你的虚拟机在服务器模式下运行:
java -version
然后寻找类似:
Java的热点(TM )64位服务器虚拟机(...)
感谢您的答案的服务器部分。但是GC - 这是一个巨大的文件,我想有人会给出准确的答案。所以我的jvm确实是一台服务器,1.6,64位。这种情况下的时间表是什么? – javagirl
那么,这是问题,没有简短的答案。 –
如果哟您正在创建10 MB /秒的垃圾,并且您有100 MB的Eden空间,需要10秒钟才能填满,并且您将每隔10秒看到一次GC。创建更少的垃圾或使Eden空间更大,收集间隔更高。
有一个小时的默认计时器,这称为“DGC”。如果一小时内没有收集,则可触发完整的GC来清理任何分布式对象。我通常会把这个设定为一周。
的默认值是
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
顺便说一句正如我设计低延迟系统,I使伊甸空间比垃圾在一天中创建的量。当系统没有被使用时,我会每天进行一次代码触发的完整收集。这样你就不会在白天看到任何收藏,小调或大调。
下面是Java中一个真正的低延迟交易系统的例子。
http://vanillajava.blogspot.com/2011/06/how-to-avoid-garbage-collection.html
BTW Java 6的更新25现在是很老,我会考虑的Java 6更新45,如果不是Java 7更新40
一是打印所有默认JVM设置,使用:java -XX:+PrintFlagsFinal -version
默认情况下,JVM热点以-client
模式运行。
启动脚本-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
以获取包含VM启动时设置的所有属性/参数的日志时,可以使用以下参数。
关于GC,默认值由JVM人体工程学设计,请参阅Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning。简而言之:
如果没有另外设置的命令线,所述初始和最大堆尺寸基于存储器的机器上的量来计算上,默认的最大堆尺寸不会超过1GB,无论机器上安装了多少内存。
在同一文件中,选择GC算法依赖于硬件设置,VM将串行和并行收集器之间决定。要最终查看哪一个正在运行,请启用GC日志记录。
而且,你应该看看下面的Q/A:How is the default java heap size determined?
不,你不能触发它!你可以好好问一下 –
我知道。我的观点是,GC可以独立于任何时间表运行,无论是由人类触发(如您所说的那样“善意询问”),还是由其自身说出,如果它的内存不足 – javagirl
没有基于时间的时间表,如果这就是你所暗示的。 –