`
boddi
  • 浏览: 6244 次
文章分类
社区版块
存档分类
最新评论

Heap设定与垃圾回收(转)

阅读更多
. Heap设定与垃圾回收
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等。
 
2.Stack的设定
每个线程都有他自己的Stack。
-Xss
每个线程的Stack大小
Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
3.硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。
4.4种GC
第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
4种GC的具体描述参见[3]。
分享到:
评论

相关推荐

    JVM内存段分配,Java垃圾回收调优,Heap设定

    JVM内存段分配,Java垃圾回收调优,Heap设定

    内存管理与垃圾回收1

    Java虚拟机(JVM)内存管理与垃圾回收是Java编程中的关键概念,它涉及到程序运行时数据区的划分、内存分配策略以及垃圾回收机制。在Java中,内存分为堆内存、栈内存和方法区(在Java 8之后的版本中,方法区被元空间...

    JVM内存管理和JVM垃圾回收

    JVM的垃圾回收策略通常是组合使用的,例如,并行GC与CMS配合,以实现高效且低延迟的垃圾回收。 理解JVM内存管理和垃圾回收机制对于优化Java应用的性能至关重要。开发者可以根据应用的需求和特点,通过调整JVM参数来...

    从常用的垃圾回收到JVM相关调优.pdf

    Java虚拟机(JVM)中的垃圾回收(GC)机制是管理内存的一种方式,其目的在于自动释放不再被程序引用的对象所占用的内存空间。了解JVM内存布局和垃圾回收算法对于进行性能调优和故障排除至关重要。 JVM内存布局通常...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    - **日志记录与分析**:开启详细的垃圾回收日志,通过分析日志了解垃圾回收的频率和效果,以及可能存在的问题。 #### 结论 `java.lang.OutOfMemoryError: Java heap space`错误通常是由于内存配置不当、代码设计不...

    AIX系统收集Heapdump及javacore

    为了更有效地分析内存问题,需要在管理控制台中打开详细垃圾回收选项,确保垃圾回收日志(native_stderr.log)能够记录足够的信息,这对于后续的故障排查至关重要。 #### 步骤3:调整操作系统内核参数 为了防止Heap...

    .Net 垃圾回收和大对象处理 内存碎片整理.docx

    .NET框架的垃圾回收(Garbage Collection,简称GC)机制是一个自动的内存管理功能,它负责监视和清理不再使用的对象,从而释放内存资源。在.NET中,GC根据对象占用的内存大小将其分为大对象和小对象,并采取不同的...

    tomcat 解决Java heap space问题

    新生代用于存放新创建的对象,而老年代则存放经过多次垃圾回收仍然存活的对象。当堆空间不足以满足新对象的创建或已存在对象的升级时,就会抛出“Java heap space”异常。 解决这个问题有以下几种策略: 1. 增加...

    关于(java heap space)内存溢出的解决办法

    - **内存泄漏**:程序中存在未释放的引用,导致对象无法被垃圾收集器回收,久而久之,内存占用持续增加。 ### 3. 解决办法 #### 3.1 调整JVM参数 - 增加堆大小:通过`-Xms`和`-Xmx`设置初始和最大堆大小,如`-Xms...

    java heap s

    5. **垃圾回收策略调整**:通过调整垃圾回收器的配置,例如使用G1或ZGC等新一代垃圾回收器,减少碎片。 6. **代码优化**:优化代码逻辑,减少不必要的资源消耗,比如及时关闭流、数据库连接等。 7. **使用内存分析...

    记录java.lang.OutOfMemoryErrorJava heap space的情况.docx

    JVM的内存调优还包括合理设定堆内存大小,避免频繁的垃圾回收,以及优化对象的创建和释放。 四、其他内存区域: 1. 每个线程都有自己的栈空间(Stack),其大小可以通过`-Xss`参数设置。栈的大小直接影响到可以同时...

    heap_java_heap_

    2. 调整GC策略:根据应用类型和性能需求选择合适的垃圾收集器,并调整相应的参数,例如并行度、新生代与老年代的比例等。 3. 对象创建和引用管理:避免创建过多短生命周期的对象,减少对垃圾收集的压力;及时释放...

    解决Java-heap-space问题.doc

    尽管可以调用`System.gc()`来请求进行垃圾回收,但并不保证实际执行,因为这取决于JVM的具体实现和当前运行状况。选择合适的垃圾收集器(如增量收集器、并行标记/清除收集器等)也可以优化内存管理,提高系统性能。 ...

    hllvm.新生代回收调试的一些心得1

    本文将分享一些关于新生代垃圾回收调试的经验与心得,帮助开发者更好地理解和优化Java应用程序的性能。 二、调试环境 本文将以Sun的JDK 6 HotSpot 6u20版本为例,讲解在Windows XP SP3系统下使用Visual Studio ...

    jvm调优实战经验

    调整JVM参数可以控制内存分配、垃圾回收策略、并行度等,例如 `-Xms` 和 `-Xmx` 设定堆内存大小,`-XX:NewRatio` 控制年轻代和老年代的比例,`-XX:+UseConcMarkSweepGC` 开启CMS垃圾回收器等。通过监控工具(如...

    weblogic内存调优

    非堆内存的初始大小由-XX:PermSize指定,最大大小由-XX:MaxPermSize设定。在Java 8及以后的版本中, PermGen 被 Metaspace 取代,其大小不再受硬性限制,而是动态扩展。 WebLogic服务器内存调优主要关注堆内存的...

    JVM内存设置与调优指南

    垃圾收集(Garbage Collection, GC)是JVM内存管理的重要组成部分,它负责自动回收不再使用的对象所占用的内存。GC算法主要有以下几种: 1. **标记-清除(Mark-Sweep)**:标记所有活动对象,然后清除所有未标记的...

    jvm设置2

    9. **并行与并发**:JVM允许调整垃圾回收的并行度和并发度,以平衡吞吐量和响应时间。例如,`-XX:ParallelGCThreads`设定并行GC线程数。 10. **堆外内存管理**:在某些场景下,直接内存(Direct Memory)能提供更快...

    JVM实战参数调优

    本文将深入探讨JVM实战参数调优及其垃圾回收机制算法,帮助开发者提升Java程序的性能。 一、JVM参数调优 1. **内存配置**:JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈...

Global site tag (gtag.js) - Google Analytics