`
gk23
  • 浏览: 177272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM及其内存分配的设置

阅读更多

 

安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。

一、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)及其内存分配的设置

分享到:
评论
1 楼 liuxuejin 2011-05-12  
请教一下:Yong区的大小模式是多少?

相关推荐

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    通过命令行参数,我们可以精细地控制JVM的内存分配,以适应不同的应用场景。以下是一些关键参数的解读与实践指南: 1. **-Xms**:设置JVM初始堆内存大小。保持-Xms和-Xmx相等,有助于减少GC停顿时间,尤其在Server...

    java中jvm内存分配相关资料总结整理

    本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个关键区域:方法区(Method Area)、堆(Heap)、栈(Stack)、程序计数器(PC ...

    堆内存及JVM内存设置参数 小笔记

    本文档涉及Java虚拟机(JVM)的堆内存分配和管理,以及相关的JVM内存设置参数。堆内存是Java中用于存储对象实例的区域,它在JVM内存模型中占据核心位置。在深入理解堆内存结构及其设置参数之前,我们需要明确几个...

    jvm内存分析工具mat

    1. **对象概览**:提供一个整体的内存分配情况,展示哪些类占据了最多的内存空间,以及它们的数量和大小。 2. **支配树**:通过支配树分析,可以找出哪些对象是其他对象生存的原因,从而发现可能的内存泄漏源。 3....

    jvm的内存结构图的ppt模型分析.zip

    在“jvm的内存结构图的ppt模型分析”中,我们将深入探讨JVM内存的不同区域及其功能。 首先,JVM内存可以分为堆内存和栈内存两大主要部分,它们都是线程共享的。 1. **堆内存**:这是Java应用中所有对象实例的存储...

    Eclipse中JVM内存设置.doc

    这是因为JVM内存分配受限于物理内存和操作系统的内存限制。 - 如果`-Xms`设置大于`-Xmx`,或者`-XX:PermSize`大于`-XX:MaxPermSize`,也会导致错误,因为初始内存大小不能大于最大内存。 - 还需考虑系统其他进程...

    JVM内存设置管理大全

    理解JVM内存的工作原理及其优化设置,对于开发高性能的Java应用程序至关重要。 ##### 1. 堆内存限制 JVM的最大堆内存大小受到三个方面的限制: - **操作系统的数据模型**:32位操作系统通常限制JVM最大堆内存为...

    初探JVM内存区域

    本篇文章将详细探讨JVM中的主要内存区域及其作用。 1. **程序计数器(Program Counter Register)** 每个线程都有自己的程序计数器,用于存储当前线程正在执行的字节码的指令地址。当线程执行方法时,这个计数器会...

    MyEclipse内存不足谈谈JVM内存

    ### MyEclipse内存不足与JVM内存...- 如果是由于操作系统限制导致的问题,可以考虑升级到支持更大内存分配的操作系统版本。 通过上述分析,我们可以更好地理解JVM内存管理机制以及如何解决MyEclipse内存不足的问题。

    JVM内存模型

    为了更好地监控和调整JVM的内存使用情况,可以利用一系列JVM参数来查看和调整内存分配情况,主要包括: - **程序计数器**:记录线程下一条要执行的指令位置。 - **堆**:线程共享,用于存储对象实例和数组。 - **...

    jvm内存分析工具mat安装包

    它通过分析JVM的堆转储(Heap Dump)文件,能帮助开发者深入理解内存分配情况,找出潜在的问题。 MAT的主要功能包括: 1. **内存泄漏检测**:MAT提供了一种名为"Leak Suspects"的报告,能够快速识别可能导致内存...

    JVM性能调优-JVM内存整理及GC回收.pdf

    本文将围绕JVM性能调优这一主题展开,重点探讨JVM内存管理机制、垃圾回收(GC)算法及其优化策略。 #### Java参数传递机制解析 首先,澄清Java中的参数传递机制是非常重要的,这有助于我们更好地理解对象在方法调用...

    设置Eclipse的JVM参数

    这是JVM启动时分配给堆内存的最小值,有助于减少JVM启动初期由于堆内存过小导致的频繁垃圾回收。 - **-Xmx712m**:设置JVM的最大堆内存大小为712MB。这是JVM运行过程中堆内存能够动态扩展的最大值。合理设置最大堆...

    java程序中的内存分配问题

    Java程序在运行时的内存分配是一个关键的概念,它关乎到程序的性能、稳定性和资源管理。这个主题主要涉及以下几个方面: 1. **JVM内存结构**:Java虚拟机(JVM)将内存划分为几个区域,包括堆(Heap)、栈(Stack)...

    Eclipse内存分配

    ### Eclipse内存分配详解 #### 一、概述 在软件开发过程中,尤其是使用Eclipse作为集成开发环境(IDE)时,可能会遇到与内存相关的错误提示,例如“内存不足”等问题。这些问题通常与Eclipse及其底层Java虚拟机...

    JVM内存结构笔记.rar

    JVM内存调优包括设置合适的堆大小、新生代与老年代的比例、设置GC策略等。例如,通过 `-Xms` 和 `-Xmx` 参数来设定堆的初始和最大大小,`-XX:NewRatio` 来调整新生代与老年代的比例,`-XX:+UseConcMarkSweepGC` 来...

Global site tag (gtag.js) - Google Analytics