1、eclipse 设置 jvm Java 虚拟机默认分配 64M 内存,如果你的应用比较大,超出 64M 内存,Java 虚拟机就会抛出 outOfMemoryError,并停止运行。不管是什么应用(Web 应用、 Application 等),只需要修改你的机器上的运行 Java 命令,在 javaxxx 命令中添加-Xms( 最小使用内存) 、-Xmx(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内存,不能超出你的机器的物理内存的总容量。对于单独的.class ,可以用下面的方法对 Test 运行时的 jvm 内存进行设置。java -Xms64m -Xmx256m Test-Xm
2、s 是设置内存初始化的大小-Xmx 是设置最大能够使用内存的大小(最好不要超过物理内存大小)在 eclipse 中的设置方法方法 1:对应在 Eclipse 中的设置为: 窗口-首选项-JAVA-已安装的 JRE,在缺省的 VM 自变量中增加 :-Xmx256M (也可以添加其他参数如 -Xms128M -XX:PermSize=64M -XX:MaxPermSize=128M)方法 2:修改 eclipse.ini-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M这里有几个问题:1. 各个参数的含义什么?2. 为什么
3、有的机器我将-Xmx 和-XX:MaxPermSize 都设置为 512M 之后Eclipse 可以启动,而有些机器无法启动?3. 为何将上面的参数写入到 eclipse.ini 文件 Eclipse 没有执行对应的设置?下面我们一一进行回答1. 各个参数的含义什么?参数中-vmargs 的意思是设置 JVM 参数,所以后面的其实都是 JVM 的参数了,我们首先了解一下 JVM 内存管理的机制,然后再解释每个参数代表的含义。堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启
4、动时创建的。”“在 JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出 JVM 主要管理两种类型的内存:堆和非堆。简单来说堆就是 Java 代码可及的内存,是留给开发人员使用的;非堆就是 JVM 留给自己用的,所以方法区、JVM 内部处理或优化所需的内存(如 JIT 编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。堆内存分配JVM 初始分配的内存由 -Xms 指定,默认是物理内存的 1/64;JVM 最大分配的内存由-Xmx 指定,默认是物理内存的 1/4。默认空余堆内存小于 40%时,JVM 就会增大堆直到
5、-Xmx 的最大限制;空余堆内存大于 70%时,JVM 会减少堆直到-Xms 的最小限制。因此服务器一般设置-Xms、 -Xmx 相等以避免在每次 GC 后调整堆的大小。非堆内存分配JVM 使用-XX:PermSize 设置非堆内存初始值,默认是物理内存的 1/64;由XX:MaxPermSize 设置最大非堆内存的大小,默认是物理内存的 1/4。JVM 内存限制 (最大值)首先 JVM 内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM 内存的最大值跟操作系统有很大的关系。简单的说就 32 位处理器虽然可控内存空间有 4GB,但是具体的操作系统会给一个限制,这个限制一
6、般是 2GB-3GB(一般来说 Windows 系统下为 1.5G-2G,Linux 系统下为 2G-3G),而 64bit 以上的处理器就不会有限制了。2. 为什么有的机器我将-Xmx 和-XX:MaxPermSize 都设置为 512M 之后Eclipse 可以启动,而有些机器无法启动?通过上面对 JVM 内存管理的介绍我们已经了解到 JVM 内存包含两种:堆内存和非堆内存,另外 JVM 最大内存首先取决于实际的物理内存和操作系统。所以说设置 VM 参数导致程序无法启动主要有以下几种原因:1) 参数中-Xms 的值大于-Xmx ,或者-XX:PermSize 的值大于-XX:MaxPerm
7、Size;2) -Xmx 的值和 -XX:MaxPermSize 的总和超过了 JVM 内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是 1024MB,但实际系统中用到的并不可能是 1024MB,因为有一部分被硬件占用了。3. 为何将上面的参数写入到 eclipse.ini 文件 Eclipse 没有执行对应的设置?那为什么同样的参数在快捷方式或者命令行中有效而在 eclipse.ini 文件中是无效的呢?这是因为我们没有遵守 eclipse.ini 文件的设置规则:参数形如“项 值” 这种形式,中间有空格的需要换行书写
8、,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:Javajre1.6.0binjavaw.exe参数设置虚拟机,在 eclipse.ini 文件中要写成这样:-vmC:Javajre1.6.0binjavaw.exe按照上面所说的,最后参数在 eclipse.ini 中可以写成这个样子:-vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:MaxPermSize=128M实际运行的结果可以通过 Eclipse 中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。-TOMCAT
9、 JVM 设置1:TOMCAT 初始 JVM 大小为 64M,在将应用正式部署后,可以通过调整 catalina.bat中的内容调整 tomcat 的初始 JVM 大小,以获得更好的性能2:修改 bin 目录下的 /catalina.bat3:查找 %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Xms256m -Xmx256m 4:Xms 为初始最小分配内存,Xmx 为最大允许分配内存。具体的帮助可以使用 java -X -help 看相关的参数含义5:一般将 xms 和 xmx 设定为同样的值6:通过 Tomcat Manager
10、 中 Server Status 可以浏览内存使用情况根据程序需要调整其大小Eclipse 1:在 ECLIPSE 目录中查找到 eclipse.ini 默认情况-vmargs-Xms40m-Xmx256m可以适当修改其中参数的值然后重新启动 ECLIPSEeclipse 内存不够,在 debug 的 wiew 中,arguments-vm arguments 中设置以下,解决之2009-05-31 16:57-Dcatalina.home=“C:Program FilesApache Software FoundationTomcat 5.5“ -Djava.endorsed.dirs=“C:Program FilesApache Software FoundationTomcat 5.5endorsed“ -Dcatalina.base=“C:Program FilesApache Software FoundationTomcat 5.5“ -Djava.io.tmpdir=“C:Program FilesApache Software FoundationTomcat 5.5temp“ -Xmx1024M -Xms512M -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote