2013-09-24 31 views
3

我想知道什麼是在java 6(64位)機器上運行的默認時間表GC?我知道它可以在沒有任何時間表的情況下被觸發,但是,仍然會是什麼樣的默認行爲?java 6中GC的默認時間表是什麼? (1.6.0-25)

我不知道java是否像-server選項那樣運行。我如何檢查?我沒有在java進程命令中看到它(當我做'ps ax | grep java')時,但仍然可以在服務器模式下運行嗎?它依賴於安裝的jvm還是物理服務器的類型?請讓我知道我怎麼知道這一點。

+4

不,你不能觸發它!你可以好好問一下 –

+0

我知道。我的觀點是,GC可以獨立於任何時間表運行,無論是由人類觸發(如您所說的那樣「善意詢問」),還是由其自身說出,如果它的內存不足 – javagirl

+3

沒有基於時間的時間表,如果這就是你所暗示的。 –

回答

2

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

如果你想知道,如果你的虛擬機在服務器模式下運行:

java -version 

然後尋找類似:

Java的熱點(TM )64位服務器虛擬機(...)

+0

感謝您的答案的服務器部分。但是GC - 這是一個巨大的文件,我想有人會給出準確的答案。所以我的jvm確實是一臺服務器,1.6,64位。這種情況下的時間表是什麼? – javagirl

+0

那麼,這是問題,沒有簡短的答案。 –

2

如果喲您正在創建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

3

一是打印所有默認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?