一、设置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:\j2sdk15\bin>java -X

-Xmixed           mixed mode execution (default)

-Xint             interpreted mode execution only

-Xbootclasspath:

set search path for bootstrap classes and resources

-Xbootclasspath/a:

append to end of bootstrap class path

-Xbootclasspath/p:

prepend in front of bootstrap class path

-Xnoclassgc       disable class garbage collection

-Xincgc           enable incremental garbage collection

-Xloggc:    log GC status to a file with time stamps

-Xbatch           disable background compilation

-Xms        set initial Java heap size

-Xmx        set maximum Java heap size

-Xss        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:

set search path for bootstrap classes and resources

设置zip/jar资源或者类(.class文件)存放目录路径

3、-Xbootclasspath/a:

append to end of bootstrap class path

追加zip/jar资源或者类(.class文件)存放目录路径

4、-Xbootclasspath/p:

prepend in front of bootstrap class path

预先加载zip/jar资源或者类(.class文件)存放目录路径

5、-Xnoclassgc       disable class garbage collection

关闭类垃圾回收功能

6、-Xincgc           enable incremental garbage collection

开启类的垃圾回收功能

7、-Xloggc:    log GC status to a file with time stamps

记录垃圾回日志到一个文件。

8、-Xbatch           disable background compilation

关闭后台编译

9、-Xms        set initial Java heap size

设置JVM初始化堆内存大小

10、-Xmx        set maximum Java heap size

设置JVM最大的堆内存大小

11、-Xss        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:\j2sdk15\bin>javac HelloWorld.java

D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld

Hello World!

java设置jvm内存_JVM(java 虚拟机)内存设置相关推荐

  1. jvm 堆外内存_jvm┃java内存区域,跳槽大厂必会知识点

    正文约: 2000字 预计阅读时间: 6分钟 文章首发于我的微信公众号:哪儿来的moon,欢迎大家关注 目录 目录 前言 正文 1.程序计数器 2.虚拟机栈 3.本地方法栈 4.堆 5.方法区 6.直 ...

  2. java ppt转图片 内存溢出_Java虚拟机内存及内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进来,墙里面的人却想出来. 不知道其他人想出来没,反正我是没想出来,为什么这个JVM的运行时内存要这样设计?. 以下内容 ...

  3. java虚拟机内存告警_java虚拟机内存溢出各种场景总结

    java堆溢出 java堆用于存储对象实例,只要不断地创建对象,并且保证gc roots到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出. ...

  4. java虚拟机内存监控_java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...

    将会打印出很多jvm运行时参数信息,由于比较长这里不再打印出来,可以自己试试,内容一目了然 Jstack(Stack Trace for Java):JVM堆栈跟踪工具 jstack用于打印出给定的j ...

  5. java虚拟机内存监控_java虚拟机内存监控工具

    1.jps(JVM Process Status Tool):JVM机进程状况工具 -m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null. -l   输出应用程序主类的完整包名,或者 ...

  6. java 虚拟机内存管理_java虚拟机内存管理

    程序计数器: 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 程序计数器处于线程独占区 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地 ...

  7. java栈的内存_JVM的栈内存

    每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈.Java栈以帧为单位保存线程的运行状态.虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈和出栈. 某个线程正在执行的方法被称为该 ...

  8. java 老年代 占用空间_JVM之堆内存(年经代,老年代)

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  9. java 对象 jvm生命_JVM对象的生命周期

    一旦一个类被装载.连接和初始化,它就随时可以被使用.程序可以访问它的静态字段,调用它的静态方法,或者创建它的实例.作为Java程序员有必要了解Java对象的生命周期. 类实例化 在Java程序中,类可 ...

  10. 在java中jvm目录_JVM具体在哪个文件夹下的

    \jdk1.6.0 -- JDK的根目录,包含一些软件版权,声明,和自述文件, 同时包含归档了的Java平台源代码包src.zip \jdk1.6.0\bin -- JDK包含的一些开发工具执行文件 ...

最新文章

  1. Windows7 Scrapy框架建立
  2. 海量数据处理_国家重点研发计划“面向异构体系结构的高性能分布式数据处理技术与系统”简介...
  3. Gemstones(牛客第八场多校)
  4. LeetCode Contains Duplicate (判断重复元素)
  5. k8s使用helm打包chart并上传到腾讯云TencentHub
  6. 为有朝一日自己弄个玩具玩而准备
  7. 如何准备Java初级和高级技术的面试呢?
  8. java 正则提取大于等于号_Java正则表达式
  9. Matlab标准语音库 Timit Database
  10. [Java] 蓝桥杯BASIC-22 基础练习 FJ的字符串
  11. 55)函数指针和其意义
  12. tsinsen A1333
  13. 七个常见队列的简单学习
  14. windows下的gitbub使用入门
  15. 放弃高薪的程序员,体制内或许才是最好的归宿
  16. 记一次计算机课作文,记一次有趣的作文课作文800字
  17. 不可不学的摄影技巧.1—构图
  18. 在c语言中整数除以0,整数除零在哪些平台上触发浮点异常?
  19. Unity 简单TCP通信实现
  20. 大聊Python----Select解析

热门文章

  1. python上的免费免登录微信智能聊天机器人
  2. 黑金AX301开发板SPI通信详解
  3. html 名词解释 综合解释,HTML和JAVASCRIPT综合练习题2014答案
  4. Windows快捷键总汇(来自官方)
  5. arduino/Mixly使用LGT8F328P
  6. iOS小技能:-fobjc-arc和 -fno-objc-arc 的使用(在非ARC工程中集成ARC代码、在ARC工程中集成非ARC的第三方代码)
  7. 2021 年全国职业院校技能大赛 网络搭建与应用赛项
  8. python工匠技巧系列(给变量注明类型)
  9. 外链自动转内链html,typecho网站外链自动转换内链插件ShortLinks
  10. xp未受用户在此计算机登录,XP系统无线网络连接受限制或无连接的解决办法