java有两个参数可以豹肉钕舞设置运行时堆内存,一个是设置堆内存的初始大小,另一个是设置堆内存的最大可用空间。(1)-Xms<s足毂忍珩ize>设置jvm可用堆内存的初始大小,例如:-Xms81920K,-Xms256m,一般使用后者这种方式。(2)-Xmx<size>设置jvm堆内存的最大可用空间,例如:-Xmx81920K,-Xmx512m,一般使用后者的这种方式。当一个Java程序没有可用的内存空间分配时就会抛出:java.lang.OutOfMemoryError:Javaheapspace,error,此时就需要通过各种手段去调整,以解决问题,可以优化代码,但最直接的方式莫过于增加jvm的最大的可用内存。本文将通过jdk自带的工具:jmc,动态展示jvm对内存使用状态。
工具/原料
jdk
jmc.exe
方法/步骤
1、在Windows中D盘下新建个java目录,编写一个小程序,TestString类,里面就写一个sleep方法,让线程沉睡100秒。
2、编译并运行此程序。
3、打开jdk的安装目录,在bin下找到jmc.exe,双击运行。在JVM浏览器一栏,可以看到运行的TestString程序,双击MBean服务器,进入监控页面。
4、在下面有内存模块,MaximumJavaHeap:堆内存的最大值。通过右侧加号水貔藻疽,可以在memory中找到init,添加瘌豚胛瑗到监控项中,InitialJavaHeap:堆内存的初始大小。这两个值分别对应了Xmx和Xms
5、在默认情况下Xms=128m,Xmx=1.75G;这个是我电脑默认是Java堆的分配情况
6、接下来我们看一眼在启动TestString时水貔藻疽,定义其初始堆内存值和最大堆内存值,会是什么情况?命令:java-Xms64罪焐芡拂m-Xmx128mTestString等一会,jmc会自动删除上一个TestString程序,重新生成一个TestString程序。
7、重新生成后,再次观察初始大小和最大值Xms=64m,Xmx=114m左右,虽然不等于128,但是很接近了,可能有些其他的占用吧。
8、这个是使用命令的方式,在eclipse中可以直接把命令:-Xms128m-Xmx256m写在运行时配置中,比如Javaapplication。
9、此时再去看其内存情况,发现配置生效了。