jvm内存参数设置

1. Heap设定与垃圾回收

Java 内存分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。

通常把前两个区域叫做堆区(Heap),Permanent区则负责保存反射对象,Class的meta信息等.

堆区发生内存溢出的异常为:java.lang.OutOfMemoryError: Java heap space,

Permanent区发生内存溢出是为:OutOfMemoryError: PermGen space.

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%的剩余空间。
经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。
 
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。 
2.Stack的设定
每个线程都有他自己的Stack。

-Xss 每个线程的Stack

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

3,Permanent区
程序发布时候可能遇到的OutOfMemoryError: PermGen space,Class在被加载的时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。
通过 -XX:PermSize=64M -XX:MaxPermSize=128m调整.

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

时间: 2024-10-28 14:57:45

jvm内存参数设置的相关文章

转载的 jvm 内存参数设置

转载 : http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html JVM系列三:JVM参数设置.分析 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率.但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适

JVM常用参数设置

-server -Xms8g 初始堆大小 -Xmx8g 最大堆大小 -Xmn2g 年轻代大小 -Xss1024K 每个线程的堆栈大小 -XX:PermSize=256m -XX:MaxPermSize=512m Perm不属于堆内存,由虚拟机直接分配,可通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小 设置持久代(perm gen)初始值   设置持久代最大值 -XX:ParallelGCThreads=8 并行收集器的线程数 -XX:+UseConcMarkSwe

jvm常用参数设置 good

1.堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx=512m 2.年轻代大小可以通过 -Xmn 来设置,比如-Xmn=2g 或者 -Xmn512m,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 3.年老代大小 = 堆大小 – 年轻代大小 4.持久代或者永久代大小可以通过 -XX:PermSize 和 -XX:MaxPermSize 来控

tomcat安装服务和内存参数设置

第一:安装服务 在dos窗口进入到tomcat的bin目录下,通过如下命令即可将tomcat安装成服务 service.bat install Tomcat2 其中Tomcat2是服务的名称 如果启动过程中报错,很可能是jdk有问题,可以拷贝一个完整的jdk,然后指定用这个jdk.有时候为了避免对其他java程序产生影响,就要指定这个tomcat用这个jdk,可以在service.bat里指定 set JAVA_HOME=D:\apache-tomcat-6.0.14_bets\jdk1.6.0

了解java虚拟机—JVM相关参数设置(2)

1.   JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使用情况 -XX:+PrintHeapAtGC 每次GC时会分别打印回收前与回收后堆信息 -XX:+PrintGCTimeStamps 选择打印GC的方式后,再添加此参数.比如:-XX:+PrintGC -XX:+PrintGCTimeStamps 每次GC时会打印程序启动后至GC发生的时间戳. -X

配置Tomcat-8.5.15 JVM内存参数

配置Tomcat-8.5.15内存参数 apache-tomcat-8.5.15与之前的版本存在些许差异,配置方式有所改变,并且针对JVM一些参数不再支持.故本文档主要简介一下如何在apache-tomcat-8.5.15容器上配置JVM内存参数. 1.       创建环境变量文件 在%TOMCAT_HOME%\bin\目录下创建文件setenv.bat, 文件内容如下所示: SET JAVA_OPTS=-server  -Xms4g  -Xmx4g 或者内容为: SET  "JAVA_OPT

JVM内存参数

1. 设置JVM内存的参数有四个:-Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定:            -Xmx              此设置控制 Java 堆的最大大小.正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提            高吞吐量.             对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收.             缺省值: 512

JVM内存异常与常用内存参数设置总结

Java Web程序由于引入大量第三方java类库,在启动时经常会遇到内存溢出(Memory Overflow)或者内存泄漏(Memory leak)问题,导致程序启动失败. 一.OOM异常分类: OOM异常主要分为java堆溢出.虚拟机栈和本地方法栈溢出.方法区和运行时常量池溢出.本地直接内存溢出. 1. java堆溢出 java堆用于存储对象实例,只要不断的创建实例,并且GC来不及清除这些对象,那么在对象数量达到最大堆的容量后就会产生内存溢出异常.当java堆异常出现时异常栈信息"java.

【JVM】6、聊聊JVM常用参数设置

整体考虑堆大小 -Xms3550m, 初始化堆大小.通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小. -Xmx3550m,最大堆大小. 考虑分代设置堆大小 首先通过jstat等工具查看应用程序正常情况下需要堆大小,再根据实际情况设置. 新生代 -xmn2g,新生代大小.Sun官方推荐配置为整个堆的3/8. -XX:SurvivorRatio=8.Eden和Survivor的比值. 老年代 老年代=整个堆大小-新生代-永久代 永久代 -XX:Permsize=512m,设置永久