JVM(java 虚拟机)内存设置

摘要:
用法:-Xmx512m将最大堆大小设置为512 MB-XmsJavaHeap初始值。服务器端JVM应该将-Xms和-Xmx设置为相同的值。开发测试机JVM可以保留默认值;设置堆大小以下命令行参数用于设置堆大小。将此参数设置得太高可能会导致JVM仅执行大型(完整)垃圾收集。并设置JVM内存分配。

一、设置JVM内存设置
1. 设置JVM内存的参数有四个:
-Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
            -Xmx 
             此设置控制 Java 堆的最大大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提
            高吞吐量。
             对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。
             缺省值: 512 MB 
             建议值: 随工作负载的不同而有所变化,但高于缺省值。 
             用法: -Xmx512m 将最大堆大小设置为 512 兆字节
 
-Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
             设置堆大小 下列命令行参数对于设置堆大小来说很有用。 
             -Xms 
             此设置控制 Java 堆的初始大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高
            吞吐量。
             对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。
             缺省值: 256 MB 
             建议值: 随工作负载的不同而有所变化,但高于缺省值。 
             用法: -Xms256m 将初始堆大小设置为 256 兆字节
 
-Xmn    Java Heap Young区大小,不熟悉最好保留默认值;
             -Xmn 
             此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销,从而缩短服务
            器响应时间并提高吞吐 量。此参数的缺省设置通常过低,这将导致执行大量的小型垃圾回收操作。如果将此参
            数设置得过高,可能会导致 JVM 仅执行大型( 全面)垃圾回收。这些垃圾回收操作通常会耗时几秒钟,这将
            严重影响服务器的整体性能。您必须保持将此参数设置为小于整个堆大 小的一半,以避免这种情况出现。
             缺省值: 2228224 字节 
             建议值: 大约整个堆大小的 1/4 
             用法: -Xmn256m 将大小设置为 256 兆字节。  
-Xss    每个线程的Stack大小,不熟悉最好保留默认值;

2. 如何设置JVM内存分配:
(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test
 
(2)当在集成开发环境下(如eclipse)启动并使用JVM时:
a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):
1.-vmargs  2.-Xms40m  3.-Xmx256m -vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
此处设置的参数值可以通过以下配置在开发工具的状态栏显示:
在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true
修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:
1.-debug  2.options  3.-vm  4.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 -X 命令查看JVM的配置说明:
运行后如下结果,这些就是配置JVM参数的秘密武器,这些信息都是英文的,为了方便阅读,我根据自己的理解翻译成中文了(不准确的地方还请各位博友斧正)
-----------------------------------------------------------------------
D:j2sdk15in>java -X
    -Xmixed           mixed mode execution (default)
    -Xint             interpreted mode execution only
    -Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
    -Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
    -Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
    -Xnoclassgc       disable class garbage collection
    -Xincgc           enable incremental garbage collection
    -Xloggc:<file>    log GC status to a file with time stamps
    -Xbatch           disable background compilation
    -Xms<size>        set initial Java heap size
    -Xmx<size>        set maximum Java heap size
    -Xss<size>        set java thread stack size
    -Xprof            output cpu profiling data
    -Xfuture          enable strictest checks, anticipating future default
    -Xrs              reduce use of OS signals by Java/VM (see documentation)
    -Xcheck:jni       perform additional checks for JNI functions
    -Xshare:off       do not attempt to use shared class data
    -Xshare:auto      use shared class data if possible (default)
    -Xshare:on        require using shared class data, otherwise fail.
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
JVM配置参数中文说明:
-----------------------------------------------------------------------
1、-Xmixed           mixed mode execution (default)
 混合模式执行
 
2、-Xint             interpreted mode execution only
 解释模式执行
 
3、-Xbootclasspath:<directories and zip/jar files separated by ;>
      set search path for bootstrap classes and resources
 设置zip/jar资源或者类(.class文件)存放目录路径
 
3、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
      append to end of bootstrap class path
 追加zip/jar资源或者类(.class文件)存放目录路径
 
4、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
      prepend in front of bootstrap class path
 预先加载zip/jar资源或者类(.class文件)存放目录路径
 
5、-Xnoclassgc       disable class garbage collection
 关闭类垃圾回收功能
 
6、-Xincgc           enable incremental garbage collection
 开启类的垃圾回收功能
 
7、-Xloggc:<file>    log GC status to a file with time stamps
 记录垃圾回日志到一个文件。
 
8、-Xbatch           disable background compilation
 关闭后台编译
 
9、-Xms<size>        set initial Java heap size
 设置JVM初始化堆内存大小
 
10、-Xmx<size>        set maximum Java heap size
 设置JVM最大的堆内存大小
 
11、-Xss<size>        set java thread stack size
 设置JVM栈内存大小
 
12、-Xprof            output cpu profiling data
 输入CPU概要表数据
 
13、-Xfuture          enable strictest checks, anticipating future default
 执行严格的代码检查,预测可能出现的情况
 
14、-Xrs              reduce use of OS signals by Java/VM (see documentation)
 通过JVM还原操作系统信号
 
15、-Xcheck:jni       perform additional checks for JNI functions
 对JNI函数执行检查
 
16、-Xshare:off       do not attempt to use shared class data
 尽可能不去使用共享类的数据
 
17、-Xshare:auto      use shared class data if possible (default)
 尽可能的使用共享类的数据
 
18、-Xshare:on       require using shared class data, otherwise fail.
 尽可能的使用共享类的数据,否则运行失败
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
怎么用这这些参数呢?其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。
 
HelloWorld.java
-----------------------------------------------
public class  HelloWorld
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");
 }
}
 
编译并运行:
D:j2sdk15in>javac HelloWorld.java
 
D:j2sdk15in>java -Xms256M -Xmx512M HelloWorld
Hello World!

免责声明:文章转载自《JVM(java 虚拟机)内存设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java后台读取excel表格返回至Web前端【 CodeForces下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

我最开始的时候还以为是因为我的虚拟机路径是中文导致的,后来才发现原因: 4.3.12 之后的版本增加了安全检查机制(以前会被病毒利用),如果有程序将DLL注入Vbox的进程就会报错退出。一些杀软,MacType,或者别的系统性程序,都会注入DLL,找到元凶并排除即可。 解决方法:(有些方法我试了其实没有效果,我自己其实是重新打开就不会出错了,要等一会,...

数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程

目录 文章目录 目录 前言 数据包从物理网卡进入虚拟机的流程 物理网卡处理 如何将网卡收到的数据写入到内核内存? 中断下半部分软中断处理 数据包在内核态 OvS Bridge(Datapath)中的处理 veth pair 的工作原理 将数据包交给 Linux Bridge 处理 将数据包送入虚拟机 tap 口 tap 口的数据包处理流程 vho...

迷你MVVM框架 avalonjs 入门教程

新官网请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-controller, ms-important) 忽略扫描绑定(ms-skip) 模板绑定(ms-include) 数据填充(ms-text, ms-htm...

IDEA连接虚拟机

idea配置连接 转自:https://blog.csdn.net/chengbai121444/article/details/84334959 1、打开链接配置(Tools-->Deployment-->Configuration) 2、自定义虚拟机名称和连接方式(连接方式选择SFTP) 3、配置虚拟机具体信息 4、展示虚拟机页面...

tomcat优化

tomcat的内存使用配置,最大连接数配置。 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件catailna.sh。 如果 windows 是bat设置tomcat的使用内存,其实就是设置jvm的使用参数。 一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalin...

QQ会员AMS平台PHP7升级实践

作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统。AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿...