`
chengyue2007
  • 浏览: 1494569 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JVM虚拟机内存大小设置原理及各J2EE服务器JVM参数

    博客分类:
  • java
阅读更多

基本概念:

PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域
Heap space:存放Instance。

GC(Garbage Collection)应该不会对PermGen space进行清理
所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误

Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。


JVM的Heap分配可以使用-X参数设定,

 


-Xms

初始Heap大小

-Xmx

java heap最大值

-Xmn

young generation的heap大小



JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?有如下原因:
l         程序内调用了System.gc()或Runtime.gc()。
l         一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
l         Java的Heap太小,一般默认的Heap值都很小。
l         频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。
经验之谈:
1ServerJVM最好将-Xms-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx1/3[2]
2.一个GUI程序最好是每1020秒间运行一次GC,每次在半秒之内完成[2]

注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。


Stack的设定
每个线程都有他自己的Stack。

 


-Xss

每个线程的Stack大小



Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。


硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。


4种GC
1、第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
4种GC的具体描述参见[3]。


单文件的jvm内存进行设置
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

 

tomcat启动jvm内存设置

Linux:

在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值

Windows

在catalina.bat最前面加入

set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m
重起tomcat服务,设置生效
 这里可以用net start Tomcat6 方法来启动,必须在注册表中更改虚拟机的大小,其实是修改是是java虚拟机的内存的大小的。


 

 


weblogic启动jvm内存设置
在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。

 

 

JBoss

默认可以使用的内存为64MB

$JBOSSDIR$/bin/run.config

JAVA_OPTS = "-server -Xms128 -Xmx512"

eclipse
在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大

Websphere

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机

(暂略)

  • 大小: 70 KB
分享到:
评论

相关推荐

    Java虚拟机JVM参数配置说明.pdf

    在Java及J2EE大型应用的场景下,Java虚拟机(JVM)非标准参数的合理配置对于提升系统的整体性能至关重要。这些参数不仅影响着应用的运行效率,还直接关联到系统的稳定性。本文将详细介绍JVM非标准参数的相关知识,并...

    J2EE服务器调优幻灯片资料

    2. **JVM堆内存大小**:合理设置初始堆内存大小`-Xms`和最大堆内存大小`-Xmx`。 3. **年轻代和老年代配置**:年轻代空间`-XX:NewRatio`、`-XX:NewSize`、`-XX:MaxNewSize`;幸存者空间`-XX:SurvivorRatio`;永久代...

    Java 6 JVM 参数选项大全

    特别是在Java、J2EE等大型应用中,通过合理设置JVM参数可以极大提升系统的整体性能与稳定性。 #### JVM 非标准参数的重要性 JVM非标准参数主要指那些用于优化JVM内部行为的配置项,这些参数通常在开发阶段被忽略或...

    JVM历史发展和内存回收笔记.rar

    3. **J2SE, J2EE, J2ME**:2000年代初,Sun Microsystems将JVM分为三个平台版本:J2SE(标准版),J2EE(企业版)和J2ME(微型版),分别针对桌面应用、企业级应用和移动设备。 4. **HotSpot JVM**:2000年,Sun ...

    JVM管理内存就像公司入职与裁员

    JVM内存管理是虚拟机的事情,和开发人员有什么关系。这种想法一直在我们开发人员的潜意识中存在:“内存管理,与我无关,只要规范地写好Java代码就好喽,虚拟机那是Oracle或者IBM的事。”。我们暂时先放下这个想法啊...

    [浅析J2EE应用服务器的JAVA类装载器]python回朔异常的模块.docx

    Java类装载器是Java虚拟机(JVM)的一部分,负责加载类文件到JVM内存中。由于Java程序由多个类组成,这些类不是一次性全部加载,而是按需加载。当JVM需要使用某个类时,它会向相应的类装载器发出请求。类装载器负责...

    J2EE性能优化--服务器

    这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就...曾经的我经常害怕处理内存溢出的问题,因为不知道他为什么会出现这个问题,当我在看了这本书以后明白了垃圾回收算法,以及JVM是如何帮助我们处理GC的

    WebSphere应用服务器Java虚拟机性能调优与诊断

    ### WebSphere应用服务器Java虚拟机性能调优与诊断 #### 概述 在现代软件开发领域,特别是企业级应用环境中,IBM WebSphere Application Server (WAS) 的使用极为广泛。作为一款高性能、高可靠性的应用服务器,WAS ...

    精品:java虚拟机分析与优化PPT

    - 典型的调优参数包括-Xmx、-Xms(设置堆内存大小)、-XX:+UseConcMarkSweepGC(启用并发标记-清扫垃圾回收器)等。 3. **调试工具** - 使用如VisualVM、JConsole等工具可以监控和分析Java应用程序的运行状况。 ...

    J2ME-J2EE论文

    4. **版本兼容性**:不同的J2ME设备可能支持不同的Java虚拟机(JVM)版本,因此需考虑跨平台兼容性。 5. **用户界面**:J2ME的UI设计需要适应小屏幕和有限的输入方式,提供良好的用户体验。 **具体实例** "Using ...

    2020年java虚拟机生态系统报告_jvm_2020.pdf

    Java虚拟机(JVM)是Java开发的核心组成部分,它为Java应用程序提供运行环境。这份2020年的JVM生态系统报告深入探讨了JVM使用者在生产环境中的实践、选择和挑战。以下是一些关键知识点: 1. **Java供应商选择**:...

    JVM深入理解及调优.ppt

    JVM内存分为多个区域:方法区(Method Area)、堆区(Heap Area)、虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。方法区存储类信息、常量、静态变量等,...

    Java虚拟机分析与优化

    1. **调整堆内存大小**:合理设置初始堆大小(`-Xms`)和最大堆大小(`-Xmx`),以满足应用程序的需求。 2. **选择合适的垃圾回收器**:根据应用程序的特点选择最合适的垃圾回收器,如CMS、G1等。 3. **启用压缩指针...

    eclispse 设置内存

    Eclipse默认的内存设置可能不够用,尤其是在进行J2EE项目开发时,由于需要加载大量的库和框架,对内存的需求会显著增加。即使增加了物理内存,如果Eclipse的内存参数没有调整,问题仍然可能出现。 Eclipse的内存...

    jVM之走进类加载dsaas

    1. **内存溢出**(Out Of Memory Error, OOM):学习JVM可以帮助开发者更好地理解和解决内存溢出问题,比如通过调整堆内存大小或优化代码来减少内存占用。 2. **性能瓶颈**:通过深入学习JVM的工作原理,开发者可以...

    WebSphere配置文档

    通过管理控制台,可以进入"服务器" -> "应用程序服务器" -> "进程定义" -> "Java 虚拟机"来调整初始堆大小和最大堆大小。这两个参数分别设置为相同值,可以避免因内存分配不均导致的性能问题。通常,这需要根据应用...

    初识JVM – JVM概念.pdf

    JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而无需重新编译。 ##### 特点: 1. **跨平台性**...

    J2EE 性能优化

    1. **JVM内存配置**:理解不同JVM内存区域如堆内存(Heap)、方法区(Metaspace)、栈内存(Stack)等的作用,合理设置-Xms、-Xmx、-XX:MaxMetaspaceSize等参数,避免内存溢出和碎片化。 2. **垃圾回收(GC)调优**...

    1_JVM_1~3章上.pdf

    - Java虚拟机(JVM):负责解释字节码,是Java跨平台特性的关键部分。 - Java类库:一组标准API集合,使开发者能够构建丰富多样的应用程序。 2. Java开发环境的组成: - JDK(Java Development Kit):包括JRE和...

Global site tag (gtag.js) - Google Analytics