Grails1.1和Groovy1.6的Java虚拟机的内存设置和调整

在这篇文章中,我希望回答下列问题:

.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

时间: 2024-05-25 07:32:43

Grails1.1和Groovy1.6的Java虚拟机的内存设置和调整的相关文章

Java虚拟机自动内存管理

生活规律告诉我们,在享受便利的同时一般都会付出巨大的代价,如果你在享受了便利的同时,还没有为此付出代价,不是说明没有,只是还没到付出的时候.试问,有哪个Java系统架构师不懂Java虚拟机?纵观Java程序员的发展历程,又有多少人是卡在了Java虚拟机之上.所以如果你还没有感觉到为此付出代价,说明你已经Java虚拟机的糖衣炮弹所击中,且被毒害之深.Java的自动内存管理就是这样,像毒药一样,一旦上瘾就很难戒掉,而且会沉迷于此.而正确的做法就是了解其原理,拿到尚方宝剑,当虚拟机不好好为你提供服务时

Java虚拟机的内存结构

我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类.另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收.如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,

Java虚拟机JVM内存分区及代码执行机制

1.  JVM体系结构   图1 JVM体系结构        方法区:存放JVM加载的类型信息.包括: 类型基本信息,常量池,字段信息,方法信息,类变量,指向ClassLoader的引用,Class类的引用,方法表等. (对应JVM内存配置中的-PermSize等)    java堆:程序中创建的类的实例和数组,包括class对象和exception对象,存放在堆里面.堆中除了存储对象的实例数据外,还要存储该对象指向方法区中类型信息的指针. (JVM中所有的线程共享堆空间,对应JVM内存配置中

深入Java虚拟机之虚拟机体系结构

工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的"伎俩". 要对Java程序进行内存优化和性能调优,不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书<深入Java虚拟机(第二版)>(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述).当然了,了解Java虚拟机的好处

Java虚拟机体系结构深入研究总结

工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的"伎俩". 要对Java程序进行内存优化和性能调优,不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书<深入Java虚拟机 (第二版)>(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述).当然了,了解Java虚拟机的好

java-《深入理解Java虚拟机》有关methodHandle的代码问题?

问题描述 <深入理解Java虚拟机>有关methodHandle的代码问题? 以下代码书上说是输出"i am grandfather",但远行实际输出为"i am father" class Test { class GrandFather { void thinking() { System.out.println("i am grandfather"); } } class Father extends GrandFather {

java虚拟机学习笔记

笔记 1.编译顺序:                 编译器                     虚拟机      虚拟机          java源文件*.java------->字节码*.class------>类装载器--->执行引擎 一个.class文件只能包含一个类或接口.因此.java文件中定义了多少类,编译时就会生成多少.class文件(内部类不算). 2.java程序可以选择两种方式访问底层系统,由程序员选择:(1).通过java程序调用javaapi调用本地方法,

虚拟机概论(六)——JAVA虚拟机模型

JAVA虚拟机模型 由于它的高度可移植性,JAVA已经成为Internet上的主要编程语言. "模拟机"的概念是计算机工业界经常使用的对虚拟机的解释之一.这种虚拟机概念和IBM版的虚拟机非常不同.在IBM的概念中,系统内存和资源被分割,成为当前机器的精确拷贝.而对于模拟机,系统并不被分割,而是有一台新的"机器"或者虚拟机加载到当前系统中,在不改变当前系统的前提下,向用户提供不同的功能.这种类型的虚拟机被证明是非常强大的,它允许软件开发人员在一台完全不同的机器上仿效另

java虚拟机学习笔记2

笔记 11.数组数组也是类的对象.具有相同类型和维数的数组属于同一个类(不管长度只看维数).数组的长度属于对象实例.多维数组也是一维数组.如二 维数组,即为一个一维数组,该一维数组的每个元素是一个数组的引用.数组和普通对象一样也存储在堆中.数组名为数组的引用,通过索引即数组标号来访问数组内容. 12.异常在java栈帧的帧数据区内保存有针对该方法的异常表的引用.异常表记载了该方法的字节码(*.class)受catch子句保护的范围(即try子句里的 字节码).当某个方法抛出异常时,虚拟机在对应的