你知道如何配置JVM内存分配吗这里和大家分享几个妙招安装Java开发软件时默认安装包含两个文件夹一个JDK(Java开发工具箱)一个JRE(Java运行环境内含JVM)其中JDK内另含一个JRE如果只是运行Java程序则JRE已足够而JDK则只有开发人员才用到 一配置JVM内存 配置JVM内存的参数有四个 XmxJavaHeap最大值默认值为物理内存的/最佳设值应该视物理内存大小及计算机内其他内存开销而定 XmsJavaHeap初始值Server端JVM最好将Xms和Xmx设为相同值开发测试机JVM可以保留默认值 XmnJavaHeapYoung区大小不熟悉最好保留默认值 Xss每个线程的Stack大小不熟悉最好保留默认值 如何配置JVM内存分配 ()当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效) javaXmxmXmsmXmnmXssmTest ()当在集成开发环境下(如eclipse)启动并使用JVM时 a在eclipse根目录下打开eclipseini默认内容为(这里设置的是运行当前开发工具的JVM内存分配) vmargsXmsmXmxmvmargs表示以下为虚拟机设置参数可修改其中的参数值也可添加XmnXss另外eclipseini内还可以设置非堆内存如XX:PermSize=mXX:MaxPermSize=m 此处设置的参数值可以通过以下配置在开发工具的状态栏显示 在eclipse根目录下创建文件options文件内容为orgeclipseui/perf/showHeapStatus=true 修改eclipse根目录下的eclipseini文件在开头处添加如下内容 debugoptionsvmjavawexe重新启动eclipse就可以看到下方状态条多了JVM信息 b打开eclipse窗口首选项Java已安装的JRE(对在当前开发环境中运行的java程序皆生效) 编辑当前使用的JRE在缺省VM参数中输入XmxmXmsmXmnmXssm c打开eclipse运行运行Java应用程序(只对所设置的java类生效) 选定需设置内存分配的类自变量在VM自变量中输入XmxmXmsmXmnmXssm 注如果在同一开发环境中同时进行了b和c设置则b设置生效c设置无效如 开发环境的设置为Xmxm而类Test的设置为XmxmXmsm则运行Test时生效的设置为 XmxmXmsm ()当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效) a设置环境变量 变量名CATALINA_OPTS 变量值XmxmXmsmXmnmXssm b打开Tomcat根目录下的bin文件夹编辑catalinabat将其中的%CATALINA_OPTS%(共有四处)替换为XmxmXmsmXmnmXssm 二查看配置JVM内存信息 RuntimegetRuntime()maxMemory()//最大可用内存对应Xmx RuntimegetRuntime()freeMemory()//当前JVM空闲内存 RuntimegetRuntime()totalMemory()//当前JVM占用的内存总数其值相当于当前JVM已使用的内存及freeMemory()的总和 关于maxMemory()freeMemory()和totalMemory() maxMemory()为JVM的最大可用内存可通过Xmx设置默认值为物理内存的/设值不能高于计算机物理内存 totalMemory()为当前JVM占用的内存总数其值相当于当前JVM已使用的内存及freeMemory()的总和会随着JVM使用内存的增加而增加 freeMemory()为当前JVM空闲内存因为JVM只有在需要内存时才占用物理内存使用所以freeMemory()的值一般情况下都很小而JVM实际可用内存并不等于freeMemory()而应该等于maxMemory()totalMemory()+freeMemory()及其配置JVM内存分配 |