关于sun的Hotspot JVM中的PermGen能否被GC的问题
首先要说明的是PermGen的作用,PermGen是在JVM启动时,类和方法的Meta信息被加载到内存,放在PermGen中。
一般来说,该PermGen是不会被GC掉的,但是也要视JDK的版本和GC的策略有所区别。
(1)、在JDK1.5的版本中,缺省的GC策略是不会对PermGen进行GC的,但是如果想要PermGen被GC,可以通过CMS策略来
实施,样例配置如下:
-server -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=60 -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=40m -XX:MaxPermSize=64m -XX:+HeapDumpOnOutOfMemoryError -XX:SurvivorRatio=8
POC如下图:
此处需要注意的是:使用CMS(ConcMarkSweep)策略时,必须有:-XX:+CMSPermGenSweepingEnabled 和-XX:+CMSClassUnloadingEnabled
来配合同时启用,才可以对PermGen进行GC(
实际主要参数为:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
)。而且参数:-XX:+CMSPermGenSweepingEnabled在JDK1.6中是不存在的。
可以通过jconsole中的MBeans=>com.sun.management.HotSpotDiagnostic来验证JVM中的参数。
(2)、在JDK1.6的版本中,缺省的GC策略是不会对PermGen进行GC的,但是如果想要PermGen被GC,可以通过CMS策略来
实施,样例配置如下:
-server -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:PermSize=40m -XX:MaxPermSize=64m -XX:+HeapDumpOnOutOfMemoryError
实际主要参数为:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
效果图如下:
总结:CMS策略可以对PermGen进行GC,但是前提是应用程序停止后能保证其所使用的类完全达到可以被GC的条件,如果某些web应用中配置了listener的话,这些web应用通过应用服务器的web控制台停掉后,其listener并不会停掉,导致该应用所加载的类不会被卸载。因为:listener中的两个方法,contextInitialized()是在Servlet容器启动时执行,而contextDestroyed()是在Servlet容器停止时执行。因此要想让PermGen在应用服务器启动状态下被GC,需要以下两个条件:
(1)、配置CMS策略,如:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled,只是jdk1.6中不需要-XX:+CMSPermGenSweepingEnabled参数;
(2)、所控制的web应用程序,不能配置类似listener之类的线程应用。
分享到:
相关推荐
- `-XX:PermSize` 和 `-XX:MaxPermSize` 用于设置永久代的初始和最大大小,这两个参数在较新的JVM版本(如Java 8及以上)中已被移除,取而代之的是元空间(Metaspace)。 3. **垃圾收集器配置**: - `-XX:+...
`-XX:+UseFastAccessorMethods`启用原始类型访问的优化,`-XX:+UseBiasedLocking`启用偏向锁,提高轻量级锁的效率,而`-XX:+DisableExplicitGC`则禁止代码中显式调用System.gc()。 总之,JVM优化涉及到内存分配、...
在这个版本中,HotSpot JVM提供了多种垃圾回收(GC)算法,每种算法都有其特定的适用场景和参数调整策略。下面将详细讨论JDK9中的主要GC类型、相关参数以及调优策略。 1. **GC类型与启用参数**: - **Serial GC**...
1. 标准选项(-X):由Sun Microsystems定义,用于控制JVM的行为,但不保证跨版本兼容。 2. 非标准选项(-XX):非公开的,可能在不同版本间有所变化,主要用于调优。 3. 特性选项(-XX:+/-):开启或关闭特定的JVM...
15. **-XX+UseCMSInitiatingOccupancyOnly**:指定HotSpot VM总是使用XX:CMSInitiatingOccupancyFraction的值。 16. **-XX:MaxTenuringThreshold**:晋升老年代的对象年龄阈值。 17. **-XX:+PrintClassHistogram**:...
在一个特定的系统环境下,如Window 7,使用特定版本的JDK,通过调整JVM参数(如`-XX:NewRatio`、`-XX:MaxPermSize`等),并启用`-XX:+PrintGCDetails`和`-XX:+PrintGCTimeStamps`,可以观察到具体的GC行为,例如...
KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt....
### Sun Hotspot V1.6.0 JVM GC详解 #### 一、JVM结构与GC基础知识 ##### 1.1 JVM内存结构概述 Java虚拟机(JVM)内存主要分为以下几个部分: - **程序计数器(PC Register)**:记录当前线程所执行的字节码指令...
### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC...
HotSpot虚拟机是Sun Microsystems开发的一款高性能的JVM实现。它将这些数据区域的关系进行了可视化表示,有助于理解各个区域之间的交互与协作。 #### 三、垃圾收集算法与方式 ##### 1. 根搜索算法(CGROOT) 根搜索...
在Java 8之前,PermGen space 是HotSpot JVM的一部分,并且它的大小可以通过JVM参数进行调整。 当PermGen space的可用空间被耗尽时,Java应用程序将抛出`java.lang.OutOfMemoryError: PermGen space`异常。这种错误...
1. **HotSpot虚拟机**:HotSpot是Oracle JDK中的一个JVM实现,它在运行时可以动态编译和优化Java字节码,以提供更好的性能。HotSpot包含两种垃圾收集器:Serial和Parallel。 2. **垃圾收集(GC)**:GC是Java内存管理...
在实际开发环境中,特别是在开发阶段,很少出现因字节码错误而导致的问题,因此关闭验证可以在不影响正常开发的情况下提高启动速度。 ##### 2. `-Xms24m` 和 `-Xmx96m` 设定初始堆大小和最大堆大小可以有效避免JVM...
F:\java\jdk1.8.0_121\jre\bin>java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version 如果出现以下提示,说明成功(显示信息比较多,看第一行)。 Java HotSpot(TM) 64-Bit Server VM warning: ...
此外,理解各种GC相关的JVM参数也至关重要,如`-XX:+UseSerialGC`、`-XX:+UseParallelGC`、`-XX:+UseConcMarkSweepGC` 和 `-XX:+UseG1GC`等,这些参数用于指定使用哪种垃圾收集器。 调优过程中,还需要关注以下指标...
这份"JVM配置资料"包含的可能是一系列关于优化JVM性能、理解和调试JVM行为的重要信息。下面将详细讨论JVM配置中的关键知识点。 1. **JVM内存模型**: - **堆内存(Heap Memory)**:分为新生代(Young Generation...
6. **启动优化**:通过启动参数调整JVM启动性能,例如 `-XX:+UseConcMarkSweepGC` 用于开启CMS收集器。 7. **调优工具**:JDK自带的`jconsole`、`jvisualvm`等工具,以及第三方工具如`VisualGC`、`YourKit`等,帮助...
使用 `-verbose:gc`选项来启用垃圾收集器日志。 垃圾收集器监控 Java HotSpot虚拟机提供了垃圾收集器监控功能,用于实时监控垃圾收集器的活动信息。使用 `-XX:+UseGCLog`选项来启用垃圾收集器监控。 结论 Java ...