JVM内存设置与查看方式

 更新时间:2026年01月29日 16:18:32   作者:Getgit  
文章介绍了如何设置JVM内存参数,包括-Xmx、-Xms、-Xmn、-Xss四个参数的设置方法,并提供了在命令提示符、集成开发环境(如Eclipse)和服务器环境中设置JVM内存分配的详细步骤,此外,还介绍了如何通过`Runtime.getRuntime()`方法查看JVM内存信息

一、设置JVM内存设置

1. 设置JVM内存的参数有四个

-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

  • -Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
  • -Xmn Java 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,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m

二、查看设置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()。及其设置JVM内存分配。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解java构建者模式Builder

    详解java构建者模式Builder

    这篇文章主要介绍了java构建者模式Builder,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java的枚举,注解和反射(二)

    Java的枚举,注解和反射(二)

    今天小编就为大家分享一篇关于Java枚举,注解与反射原理说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-07-07
  • Java程序员的10道常见的XML面试问答题(XML术语详解)

    Java程序员的10道常见的XML面试问答题(XML术语详解)

    包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见。XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准
    2014-04-04
  • JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架

    JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JC

    这篇文章主要介绍了JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架的相关资料,需要的朋友可以参考下
    2016-12-12
  • 设计模式之原型模式_动力节点Java学院整理

    设计模式之原型模式_动力节点Java学院整理

    这篇文章主要介绍了设计模式之原型模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 自己手写Mybatis通用batchInsert问题

    自己手写Mybatis通用batchInsert问题

    这篇文章主要介绍了自己手写Mybatis通用batchInsert问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java返回json请求中文变成问号的问题及解决

    java返回json请求中文变成问号的问题及解决

    这篇文章主要介绍了java返回json请求中文变成问号的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • java正则表达式校验篇(附详细代码示例)

    java正则表达式校验篇(附详细代码示例)

    正则表达式可以用来验证字符串是否符合某种模式,可以用来搜索、校验和替换字符串,这篇文章主要介绍了java正则表达式校验的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • 基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程

    基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程

    这篇文章主要介绍了基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程,本文通过实例图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-05-05
  • Java JDK 动态代理的使用方法示例

    Java JDK 动态代理的使用方法示例

    Java 动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。下面这篇文章主要给大家分享了关于Java JDK 动态代理的使用方法示例,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论