编辑器加载中...
一、jvm内存的设置的原理
默认的java 虚拟机的大小比较小,在对大数据进行处理时java 就会报错:java .lang.outofmemoryerror。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对test运行时的jvm内存进行设置。
java -xms64m -xmx256m test
-xms是设置内存初始化的大小
-xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
二、jvm内存分配设置
1. jvm内存分配设置的参数有四个:
-xmxjava heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-xmsjava heap初始值,server端jvm最好将-xms和-xmx设为相同值,开发测试机jvm可以保留默认值;
-xmnjava heap young区大小,不熟悉最好保留默认值;
-xss每个线程的stack大小,不熟悉最好保留默认值;
2. 如何设置jvm的内存分配:
(1)当在命令提示符下启动并使用jvm时(只对当前运行的类test生效):
java -xmx128m -xms64m -xmn32m -xss16m test
(2)当在集成开发环境下(如eclipse)启动并使用jvm时:
a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的jvm内存分配):
-vmargs
-xms40m
-xmx256m
-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-xmn,-xss,另外,eclipse.ini内还可以设置非堆内存,如:-xx:permsize=56m,-xx:maxpermsize=128m。
此处设置的参数值可以通过以下配置在开发工具的状态栏显示:
在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showheapstatus=true
修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:
-debug
options
-vm
javaw.exe
重新启动eclipse,就可以看到下方状态条多了jvm信息。
b. 打开eclipse-窗口-首选项-java-已安装的jre(对在当前开发环境中运行的java程序皆生效)
编辑当前使用的jre,在缺省vm参数中输入:-xmx128m -xms64m -xmn32m -xss16m
c. 打开eclipse-运行-运行-java应用程序(只对所设置的java类生效)
选定需设置内存分配的类-自变量,在vm自变量中输入:-xmx128m -xms64m -xmn32m -xss16m
注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:
开发环境的设置为:-xmx256m,而类test的设置为:-xmx128m -xms64m,则运行test时生效的设置为:
-xmx256m -xms64m
(3)当在服务器环境下(如tomcat)启动并使用jvm时(对当前服务器环境下所以java程序生效):
a. 设置环境变量:
变量名:catalina_opts
变量值:-xmx128m -xms64m -xmn32m -xss16m
b. 打开tomcat根目录下的bin文件夹,编辑catalina.bat,在set java_opts=%java_opts%....这句之后加上:set java_opts=%java_opts% -xms1024m -xmx1024m
c、若没有catalina.bat,只有tomcat.exe,tomcat6w.exe;则可以在启动tomcat6w.exe 后 右键配置--java--java option 下面输入:
-xmx256m
-xms64m
也可以找到注册表hkey_local_machine/software/apache software foundation/tomcat service manager/tomcat6/parameters/javaoptions
原值为
-dcatalina.home="c:/apachegroup/tomcat 6.0"
-djava.endorsed.dirs="c:/apachegroup/tomcat 6.0/common/endorsed"
-xrs
加入
-xms300m
-xmx350m
重起tomcat服务,设置生效
三、查看jvm内存信息
runtime.getruntime().maxmemory(); //最大可用内存,对应-xmx
runtime.getruntime().freememory(); //当前jvm空闲内存
runtime.getruntime().totalmemory(); //当前jvm占用的内存总数,其值相当于当前jvm已使用的内存及freememory()的总和
关于maxmemory(),freememory()和totalmemory():
maxmemory()为jvm的最大可用内存,可通过-xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;
totalmemory()为当前jvm占用的内存总数,其值相当于当前jvm已使用的内存及freememory()的总和,会随着jvm使用内存的增加而增加;
freememory()为当前jvm空闲内存,因为jvm只有在需要内存时才占用物理内存使用,所以freememory()的值一般情况下都很小,而 jvm实际可用内存并不等于freememory(),而应该等于maxmemory()-totalmemory()+freememory()
==============================================================================
set java_opts=-server -dsun.io.usecanoncaches=false -xms1024m -xmx1024m -xx:permsize=128m -xx:maxpermsize=256m -xx:+aggressiveheap -xx:+useparallelgc
rem set java_opts=-server -xmx1024m -xms1024m -xx:+aggressiveheap -xx:+useparallelgc -dsun.io.usecanoncaches=false -xx:maxpermsize=512m
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/