在這篇文章中,我希望回答下列問題:
.Grails1.1和Groovy1.6的Java虛擬機的內存設置和調整隱藏在哪裡,以及我們如何來改變它們?
.最新的版本和舊的版本之間有什麼不同?
.以上這些設置和調整在windows和linux之間的不同需要我們掌握嗎?
Grails1.1和Grails1.0.2的Java虛擬機的內存設置
如果你運行grails命令,在linux/unix平台,它是執行"$GRAILS_HOME/bin/startGrails"命令;而在windows平台,是執行"$GRAILS_HOME/bin/startGrails.bat"的批處理。這些腳本在linux和windows之間有不同的行為,並且在windows平台上,不同版本之間的設置也不同。
.linux平台的Grails 1.1:即使你設置"$JAVA_OPTS"為不同的數值,但是"server" JVM只有最大為"512 Mb"的堆空間。
. linux平台的Grails 1.02:和上面的情況相同。
.windows平台的Grails 1.1:如果沒有設置"$JAVA_OPTS"參數,那麼使用最大為"512 Mb"的堆空間,並且自動選擇Java虛擬機引擎。
. windows平台的Grails 1.02:如果沒有設置"$JAVA_OPTS"參數,那麼使用最大為"128 Mb"的堆空間,並且自動選擇Java虛擬機引擎。
從我的觀點來看,windows平台的Grails 1.1有著最好的體驗,應該被Linux/Unix平台采納。如果我有很好的理由來設置"$JAVA_OPTS"參數,那麼我不希望它不能被修改。我不知道如果設置"-Xmx512m"和"-Xmx256m"參數,JVM到底會額外做些什麼。但是如果能夠使用前面的參數,那麼使用後面的參數會導致一個錯誤?
所以我在我的Linux系統裡改變了"startGrails"命令,如下:
# comment the old setting
# JAVA_OPTS="-server -Xmx512M $JAVA_OPTS"
# check for $JAVA_OPTS instead:
if [ "$JAVA_OPTS" == "" ]; then
JAVA_OPTS="-server -Xmx512m"
fi
但是必須注意:如果你使用war包發布你的Grails應用到一個應用服務器上,那麼這些內存設置不再有效;取而代之的是,你必須為你的應用設置應用服務器的內存設置。
Groovy1.6 Java虛擬機的內存設置
如果你運行groovy命令,在Linux/Unix平台會執行"$GROOVY_HOME/bin/startGroovy",在Windows平台會執行"$GROOVY_HOME/bin/startGroovy.bat"。這些腳本在Linux和Windows分別不同,但是在各自的平台上,Groovy版本1.6和版本1.5.7卻是相同的。下面是這些不同:
.Linux平台的Groovy1.6:如果設置了"$JAVA_OPTS"的話,就會起作用,JVM的默認設置只有在"$JAVA_OPTS"為空或者沒有設置的情況下起作用。
.Windows平台的Groovy1.6:"$JAVA_OPTS"肯定起作用,如果"$JAVA_OPTS"為空或者沒有設置,那麼最大堆空間為128Mb。
你可以通過設置在"$HOME/.groovy/startup"文件裡的"$JAVA_OPTS"更改所有的Groovy應用的內存設置,不受其他Java應用的影響,這個文件會被startGroovy腳本讀取,如果它存在的話,會被當做一個shell腳本來運行。
在開源的Java應用服務器裡設置JVM內存
Paul Gu在他的blog""裡,不僅列出了在設置堆大小的時候的大量陷阱和錯誤,而且給出了很多關於怎麼找出堆大小和不同的Java應用包括很多開源的Java應用服務器的"$JAVA_OPTS"設置的提示。很多提示都能幫助你在不同的系統發布你的Grails應用,並且能夠調整你的JVM內存設置。
原文網址:http://www.groovygrails.de/blog/groovygrails/entry/grails_1_1_and_groovy