`
dyllove98
  • 浏览: 1382346 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38327
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:78636
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:131778
社区版块
存档分类
最新评论

关于sun的Hotspot JVM中的PermGen能否被GC的问题(-XX:+UseConcMarkSweepGC )

阅读更多

关于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之类的线程应用。

分享到:
评论

相关推荐

    kafka_2.9.2-0.8.2.1.tgz

    KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt....

    hsdis-amd64.zip

    F:\java\jdk1.8.0_121\jre\bin>java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version 如果出现以下提示,说明成功(显示信息比较多,看第一行)。 Java HotSpot(TM) 64-Bit Server VM warning: ...

    Eclipse 启动运行速度调优

    注意,由于 -X (尤其是 -XX JVM)开关通常是 JVM 或 JVM 供应商特定的,本部分介绍的开关可用于 Sun Microsystems J2SE 1.4.2。 <br>以下设置在大多数系统上将产生比工厂更好的设置性能。 -vmargs - ...

    垃圾收集器可视化工具gcviz.zip

    HotSpot,一个 Java 可视化机制,用以下标记配置: -verbose:gc -verbose:sizes -Xloggc:/apps/tomcat/logs/gc.log -XX: PrintGCDetails -XX: PrintGCDateStamps -XX: PrintTenuringDistributiongcviz 是在 ...

    java 6 jvm 参数选项大全

    本文是基于最新的SUN官方文档JavaSE6HotspotVMOptions 编写的译文。 主要介绍JVM 中的非稳态选项及其使用说明。 为了让读者明白每个选项的含义,作者在原文基础上补充了大量的资料。希望这份文档,对正在 研究...

    JDK1.8所有vmXX选项及值(java)

    JDK1.8.0_112所有vm选项,用于...基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值。 -XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial

    resin-jvm 调优

    要设置护理域,则使用-Xns:java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…尽管JRockit支持-verbose:gc开关,但它输出的信息会因收集器的不同而异。JRockit还支持memory、load和codegen的输出。 ...

    java查看sun包源码-monitor:java生产环境内存调优(包括jvm参数类型,JVM的参数类型jinfo&jps(参数和进程查看)j

    java查看sun包源码 主要内容包括 :blue_heart: :blue_heart: :blue_heart: :blue_heart: :blue_heart: :blue_heart: jvm参数类型:alien: jinfo & jps(参数和进程查看):alien: jstat(类加载、垃圾收集、JIT 编译):...

    Eclipse Temurin (OpenJDK8U-jdk_x64_linux_hotspot_8u312b07)

    Eclipse Temurin (OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz)适用于Linux系统。 Eclipse Temurin 项目提供了高质量的、经过 TCK 认证的 OpenJDK 运行时和相关技术,可在整个 Java生态系统中使用。

    Eclipse Temurin (OpenJDK8U-jre_x64_linux_hotspot_8u312b07)

    Eclipse Temurin (OpenJDK8U-jre_x64_linux_hotspot_8u312b07.tar.gz)适用于Linux系统。 Eclipse Temurin 项目提供了高质量的、经过 TCK 认证的 OpenJDK 运行时和相关技术,可在整个 Java生态系统中使用。

    Sun Hotspot V1.6.0 JVM GC PPT.pdf

    jvm 结构介绍、GC相关知识总结

    yarrow:[yarrow]基于JVMCI的HotSpot VM优化编译器

    多亏了 JVMCI,我可以使用-XX:+EnableJVMCI -XX:+UseJVMCICompiler -Djvmci.Compiler=yarrow选项在运行时轻松地将编译器插入JVM。 由于JVMCI是一项实验性功能,因此仅将其服务公开给Graal编译器后端(这是JVMCI的...

    JVM内存管理_GC模型_编写GC友好的代码

    JVM内存管理的介绍,编写GC友好的代码。 本材料主要关心 Sun Hotspot JVM 6的内存管理 Sun Hotspot JVM 6的GC模型 主要针对JVM6的GC模型,但也会简单介绍Java 7的G1 编写GC友好代码的一些技巧

    HotSpot-JVM-Linux-x86-Research:HotSpot JVM针对Linux-x86平台的源代码学习研究(包括代码注释,文档,用于代码分析的测试用例)

    HotSpot JVM针对Linux-x86平台的源代码学习研究(包括代码注释,文档,用于代码分析的测试用例) 构建HotSpot请运行make / mybuild.sh

    hsdis-amd64.dll-jdk11

    我们有了这个插件后,通过JVM参数-XX:+PrintAssembly就可以加载这个HSDIS插件,然后为我们把JIT动态生成的那些本地代码还原成汇编代码,然后打印出来。这个hsdis-amd64.dll是基于openjdk11 编译。

    Hsdis Java汇编指令工具

    HSDIS是一个Sun官方推荐的HotSpot...它的作用是让HotSpot的-XX:+PrintAssembly指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就可以通过输出的代码来分析问题。

    hsdis-amd64.dll-jdk8

    我们有了这个插件后,通过JVM参数-XX:+PrintAssembly就可以加载这个HSDIS插件,然后为我们把JIT动态生成的那些本地代码还原成汇编代码,然后打印出来。这个hsdis-amd64.dll是基于openjdk8编译。

    mini-jvm:使用 JDK8 实现 JVM(Java Virtual Machine)

    mini-jvm on mini-jvm on hotspot. 可以在 mini-jvm 里运行 mini-jvm . $ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -jar test.jar # Hello World! 动机 尝试了解 JVM 原理, ...

    javahotspot源码-jvm-performance-comparison:比较不同JVM性能的源代码

    java hotspot源码比较JVM实现的性能 这是我的文章的源代码。 怎么跑 Java 8基准run-benchmark-java-8.sh Java 11基准run-benchmark-java-11.sh

Global site tag (gtag.js) - Google Analytics