`
laotu5i0
  • 浏览: 143669 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

浅谈设置JVM内存分配的几个妙招

    博客分类:
  • java
阅读更多
安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。这里将为大家介绍设置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堆外内存之突破JVM枷锁

    浅谈Java堆外内存之突破JVM枷锁 本文主要介绍了Java堆外内存的概念,包括JVM内存分配、JVM垃圾回收、堆外内存的垃圾回收等相关内容。Java开发者都知道,Java中不需要手动申请和释放内存,JVM会自动进行垃圾回收;而...

    浅谈java+内存分配及变量存储位置的区别

    本文主要探讨了Java中变量的存储位置以及内存分配的区别,主要包括以下几个方面: 1. **寄存器**:虽然Java程序员无法直接控制寄存器,但它是计算机硬件中最快的数据存储区域。通常,CPU会将最频繁使用的变量存储在...

    浅谈java内存管理与内存溢出异常

    根据JVM规范,它主要分为以下几个区域: 1. **程序计数器(PC Register)**:每个线程都有自己的程序计数器,用于记录当前线程正在执行的字节码指令地址。 2. **虚拟机栈(JVM Stack)**:每个线程都有一个独立的...

    java gc调优

    在《浅谈JVM内存管理》的PPT中,可能包含了对上述概念的详细讲解,包括JVM内存模型的解析、GC算法的工作原理、如何配置和调整GC参数,以及通过实例分析GC调优的具体步骤。通过学习这个PPT,开发者可以深入理解JVM...

    浅谈IT系统运维检查的工作内容.docx

    2. **JVM内存管理**:监控JVM内存使用情况,避免内存泄露。 3. **JDBC连接池管理**:合理配置连接池参数,提高数据库访问效率。 4. **日志检查**:定期检查中间件日志文件,及时发现异常情况。 以上内容全面覆盖了...

    关于javal垃圾回收机制的一些文档

    浅谈Java垃圾回收机制.doc文档可能会涵盖以下几个关键点: 1. **对象生命周期**:当一个对象被创建后,它会在内存中占据一定的空间。如果对象不再被任何引用指向,那么这个对象就成为垃圾。 2. **垃圾收集器**:...

    浅谈Java垃圾回收的实现过程

    Java垃圾回收的实现过程可以分为以下几个阶段: 1. Eden区:当一个实例被创建了,首先会被存储在堆内存年轻代的Eden区中。 2. Survivor区(S0和S1):作为年轻代GC(MinorGC)周期的一部分,存活的对象(仍然被引用...

    浅谈java指令重排序的问题

    "浅谈java指令重排序的问题" Java指令重排序是Java虚拟机(JVM)和CPU的优化机制,目的是为了提高程序的执行效率。该机制可以在虚拟机层面和硬件层面对指令进行重新排序,以充分利用CPU的资源。 虚拟机层面的指令...

    浅谈Android中关于静态变量(static)的使用问题

    下面将详细讨论以下几个方面: 1. **静态变量的生命周期**: - 静态变量在类被加载时分配内存,这通常发生在程序启动或者第一次使用该类时。在Android中,这对应于Dalvik虚拟机(DVM)或ART运行时加载类的过程。 ...

    (完整版)Java系统架构师面试题 (2).docx

    24. 列举你做过的几个大型或超大型系统,而且描绘其特色; 架构师需要具备良好的系统设计能力和经验,能够成功地设计和实现大型系统。 25. 具备哪些能力?假如这个大型集成系统是车联网系统,那在系统剖析与架构...

Global site tag (gtag.js) - Google Analytics