2014-05-05 18 views
5

我跟隨this question並發現所有信息都已過時。Java人體工程學:如何計算默認值?

The most up-to-date guide seems to be this document regarding GC tuning。其中Oracle定義了他們愚蠢的術語人體工程學,我認爲這只是合理的(「舒適的」)默認設置。在該文件中,this document is referred to,在上面的SO問題中引用很多。

它聲稱最大堆大小的計算方法如下:

物理存儲器或1GB的1/4的較小的

。在J2SE 5.0之前,默認的最大堆大小爲64MB。您可以使用-Xmx命令行選項覆蓋此默認值。

這顯然是錯誤的,因爲我有我在具有12 GB的RAM和4096 MB測試機器,與java -XX:+PrintFlagsFinal -version | grep HeapSize驗證。但需要注意的是:

注意:爲J2SE 5.0提供的堆大小的邊界和分數是正確的。隨着計算機功能越來越強大,它們在後續版本中可能會有所不同。

這是偉大的!除了我找不到任何最新的文檔。 我確認我正在運行服務器級per this question。爲什麼這很重要? 因爲我的12 GB服務器級機器默認爲170 MB。一切都打破了。 是的,我知道我可以重寫這個。我寧願不必在每次運行的應用程序中都重複覆蓋,而且我寧願不將它硬編碼到pom文件中。更重要的是,這個數字在我的機器上隨機改變,我需要了解它是如何碰撞的。

這裏是我的Java版本:

$ java -version 
java version "1.7.0_04" 
Java(TM) SE Runtime Environment (build 1.7.0_04-b21) 
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode) 

在Mac OS X 10.9.2我。

+0

@ElliottFrisch好點,加 – djechlin

+0

@ElliottFrisch好的,儘管這個文檔沒有任何幫助。 – djechlin

+0

每個java tomcat/eclipse/etc我不得不啓動我進去,並且將-Xmx = 2g添加到配置中,或者將它設置爲JAVA_OPTS。它的價格很低,可以讓您安心 – Totoro

回答

0

你說得對。關於Java內存管理的文檔已經過時也不完整:Xmx只是一個例子。

我做了同樣的看法,我改變了我的行爲,我始終指定XMX。

在我看來,這不是一個問題。 Java程序所需的內存不應取決於您的硬件。而且我認爲這是一個很好的做法:在腳本中明確指定XMX(和其他調音)/食譜有助於在所有環境相同的行爲(DEV/PROD經常有不同的硬件配置)