CMSPermGenSweepingEnabled和CMSClassUnloadingEnabled都是与Java虚拟机(JVM)的垃圾回收相关的参数。 CMSPermGenSweepingEnabled参数用于指示JVM是否在垃圾回收过程中清理永久代(PermGen)。永久代是JVM用于存储类信息和常量池等内容的一部分。当PermGen空间不足时,JVM会触发垃圾回收来清理无用的类信息和常量池等内容。如果设置CMSPermGenSweepingEnabled为true,则JVM会在垃圾回收过程中同时清理PermGen空间,否则会在永久代空间不足时触发Full GC(全局垃圾回收)来清理。 CMSClassUnloadingEnabled参数用于指示JVM是否允许在垃圾回收过程中卸载无用的类。在JVM中,当一个类不再被使用时,它可以被卸载以释放内存。如果设置CMSClassUnloadingEnabled为true,则JVM会在垃圾回收过程中尝试卸载无用的类,否则不会卸载。 这两个参数通常用于调优JVM的垃圾回收性能,特别是在应用程序中动态加载和卸载大量类的情况下。
CMSPermGenSweepingEnabled和CMSClassUnloadingEnabled都是与Java虚拟机(JVM)的垃圾回收相关的参数。 CMSPermGenSweepingEnabled参数用于指示JVM是否在垃圾回收过程中清理永久代(PermGen)。永久代是JVM用于存储类信息和常量池等内容的一部分。当PermGen空间不足时,JVM会触发垃圾回收来清理无用的类信息和常量池等内容。如果设置CMSPermGenSweepingEnabled为true,则JVM会在垃圾回收过程中同时清理PermGen空间,否则会在永久代空间不足时触发Full GC(全局垃圾回收)来清理。 CMSClassUnloadingEnabled参数用于指示JVM是否允许在垃圾回收过程中卸载无用的类。在JVM中,当一个类不再被使用时,它可以被卸载以释放内存。如果设置CMSClassUnloadingEnabled为true,则JVM会在垃圾回收过程中尝试卸载无用的类,否则不会卸载。 这两个参数通常用于调优JVM的垃圾回收性能,特别是在应用程序中动态加载和卸载大量类的情况下。
我之前有提过类似的问题 - JVM标志CMSClassUnloadingEnabled实际上是做什么的?,但这次有点不同!
如果我使用-XX:+CMSPermGenSweepingEnabled
标志启动Java虚拟机,会打印以下信息:
请将CMSPermGenSweepingEnabled替换为CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
标志通常用于缓解PermGen OutOfMemory
错误,但我在其他地方看到,一些人发现即使按照上述建议,仍然会出现这些错误,但是如果同时使用-XX:+CMSPermGenSweepingEnabled
和-XX:+CMSClassUnloadingEnabled
,他们的虚拟机在重启之间的运行时间更长。
-XX:+CMSClassUnloadingEnabled
是否真的取代了-XX:+CMSPermGenSweepingEnabled
,或者同时使用它们仍然有一些好处?
Rich
附注:我知道PermGen问题的根本原因通常是类加载器泄漏,这更多地是关于JVM在使用上述选项时产生的消息。