在这篇文章中,我希望回答下列问题: .Grails1.1和Groovy1.6的Java虚拟机的内存设置和调整隐藏在哪里,以及我们如何来改变它们? .最新的版本和旧的版本之间有什么不同? .以上这些设置和调整在windows和linux之间的不同需要我们掌握吗? Grails1.1和Grails1
在这篇文章中,我希望回答下列问题:
.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"6 Common Errors in Setting Java Heap Size"里,不仅列出了在设置堆大小的时候的大量陷阱和错误,而且给出了很多关于怎么找出堆大小和不同的Java应用包括很多开源的Java应用服务器的"$JAVA_OPTS"设置的提示。很多提示都能帮助你在不同的系统发布你的Grails应用,,并且能够调整你的JVM内存设置。
原文网址: