`

jvm 虚拟内存设置

    博客分类:
  • java
阅读更多

-Xmn512m -Xms1024m -Xmx1024m

 

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。

 

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

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

  Java Heap分为3个区

  1.Young

  2.Old

  3.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?

  有如下原因:

  1.程序内调用了System.gc()或Runtime.gc()。

  2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。

  3.Java的Heap太小,一般默认的Heap值都很小。

  4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。

  如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间

  经验之谈:

  1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。

  2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

  注意:

  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空间的使用。

  4种GC

  1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。

  2、第二种为ThroughputGC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UsellelGC参数启动该GC。

  3、第三种为Concurrent LowPauseGC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。

  4、第四种为Incremental LowPauseGC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

  单文件的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服务,上面的设置就不生效了,就是说setJAVA_OPTS=-Xms128m-Xmx350m没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:

  修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache SoftwareFoundation\TomcatService Manager\Tomcat5\meters\JavaOptions

  原值为

  -Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"

  -Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.0\common\endorsed"

  -Xrs加入 -Xms300m -Xmx350m

  重起tomcat服务,设置生效

  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 虚拟机

分享到:
评论

相关推荐

    JVM内存溢出问题解析

    JVM 如何设置虚拟内存?在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候将抛出内存溢出异常信息。Heap Size 最大不要超过可用物理内存的 80%,一般的要将 Xmx 和 Xms 设置相同避免每次 GC ...

    jdk 内存设置jdk内存设置

    jdk 内存设置 jdk 内存设置是 Java 开发中非常重要的一部分。它直接影响着 Java 应用程序的性能和稳定性。jdk 内存设置主要包括堆大小设置、垃圾收集器的选择和配置等几个方面。 堆大小设置是 jdk 内存设置的核心...

    JVM内存设置管理大全

    在特定环境下,例如文中提到的Windows Server 2003系统,具有3.5GB物理内存且使用JDK5.0的情况下,JVM的最大堆内存设置可达1478MB。 ##### 2. 典型设置 在进行JVM的内存设置时,有几个关键参数需要特别注意: - *...

    JVM内存设置

    "JVM内存设置" JVM内存设置是一个非常重要的概念,它关系到Java应用程序的性能和稳定性。在这篇文章中,我们将讨论JVM如何使用AIX平台上的本机内存,了解Java堆的概念、OutOfMemoryError的原因和调试方法。 首先,...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而无需修改代码。本文将详细探讨这些概念: 1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类...

    Jvm对象内存分配理解

    初始化零值后,虚拟机要对对象进行必要的设置,这个对象是那个类的实例,如果才能找到类的元数据信息、对象的哈希码、对象的 gc 分代年龄等信息,这些信息都放在了对象的对象头 object header 中。 六、对象头...

    WebLogic10设置虚拟内存大小

    2. 修改 `setDomainEnv.cmd` 文件中的 `MEM_ARGS`,设置 `Xms` 参数来调整虚拟内存配置。 关于内存参数设置的疑问解答: 有时,设置 `-Xms` 和 `-Xmx` 不同会导致WebLogic只使用初始的 `-Xms` 内存大小,而不会...

    Tomcat虚拟内存

    【标题】:Tomcat虚拟内存 【描述】:在Java应用程序服务器中,Tomcat作为流行的开源Web服务器,其性能很大程度上取决于如何配置虚拟内存。Java虚拟机(JVM)是运行Tomcat的基础,它管理着应用程序的内存需求,包括...

    Java虚拟内存研究

    ### Java虚拟内存研究 #### 内存溢出的分析与解决方法 在现代软件开发中,尤其是使用Java语言开发的企业级应用中,内存管理和优化是一个非常关键的技术领域。内存溢出(Out Of Memory, OOM)是导致Java应用程序...

    用JAVA做的虚拟内存管理.rar,JDK是6.2

    在这个项目中,我们关注的是JVM如何进行虚拟内存管理,特别是在JDK 6.2版本中的实现。虚拟内存管理是操作系统的重要组成部分,它允许程序使用比实际物理内存更大的地址空间,并在需要时动态地将部分数据交换到磁盘上...

    vmmap 观察jvm内存 监控jvm jvm线程

    首先,`vmmap`是Apple提供的命令行工具,用于显示进程的虚拟内存映射。通过这个工具,我们可以查看JVM进程中的堆、栈、元空间、代码缓存等各个内存区域的使用情况,包括大小、分配、驻留页等信息。 1. **JVM内存...

    JVM-Java内存规范.png

    Java-JVM内存规范(详细完整思维导图),包含物理内存与虚拟内存、内核空间与用户空间、java中需要使用的内存组件、jvm内存结构、jvm内存回收策略、JVM参数等...

    jvm内存详解

    处理器的寄存器大小、物理内存的大小以及虚拟内存的管理都会影响JVM的性能。例如,处理器的位数限制了它可以寻址的内存大小。现代计算机系统广泛使用32位和64位架构,后者因为更大的寻址空间而具有优势。 随着硬件...

    JDK虚拟内存增加

    在Java应用开发和部署过程中,合理设置JVM的内存参数对于提高应用的稳定性和性能至关重要。不适当的内存配置可能导致频繁的垃圾回收(GC),甚至出现OutOfMemoryError,严重影响应用的响应时间和用户体验。 ### ...

    linux & JVM内存结构分析

    2. **虚拟内存**:Linux通过虚拟地址空间为每个进程提供了独立的4GB(32位系统)或128GB(64位系统)内存空间。这包括了堆、栈、代码、数据和共享库等区域。 - **堆**:动态分配内存的地方,由`malloc`和`calloc`等...

    JVM内存溢出

    例如,对于堆溢出,可以适当增大`-Xms`和`-Xmx`的值,但需要注意的是,JVM堆的大小受到操作系统环境的影响,包括32位与64位系统的差异、可用虚拟内存和物理内存的限制。因此,配置时需要结合服务器的实际内存资源...

    面向对象和JVM内存模型.pdf

    综上所述,面向对象是一种编程范式,而JVM内存模型则是运行Java程序的虚拟环境的一部分,它们共同保证了Java程序的运行效率和稳定性。开发者在编写Java代码时,需要理解这些基本概念,并能够合理地使用面向对象的...

Global site tag (gtag.js) - Google Analytics