CMSClassUnloadingEnabled
,GC也将清除PermGen并删除不再使用的类。UseConcMarkSweepGC
(感谢Sam Hasler)。请参见此答案:https://dev59.com/jXA65IYBdhLWcg3wogEb#3720052false
。还有另一个名为ClassUnloading
的选项,默认值为true
,这可能会影响其他垃圾收集器。这种情况下会很有用的一个示例:
在我们的Weblogic 10.3 JVM上设置-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
帮助解决了一个问题,即JAX-WS实现为每个Web服务调用创建一个新的代理类,最终导致内存不足错误。
它并不容易追踪。以下代码始终为port
返回相同的代理类。
final MyPortType port =
Service.create(
getClass().getResource("/path/to.wsdl"),
new QName("http://www.example.com", "MyService"))
.getPort(
new QName("http://www.example.com", "MyPortType"),
MyPortType.class);
在内部,这个代理委托给一个weblogic.wsee.jaxws.spi.ClientInstance
实例,该实例再次委托给一个新的$Proxy[nnnn]
类,其中n
在每次调用时递增。添加标志时,n
仍然递增,但至少这些临时类从内存中删除了。
更一般地说,当通过java.lang.reflect.Proxy
大量使用Java反射和代理时,这可能非常有用。
-XX:+CMSPermGenSweepingEnabled
已被弃用,应使用-XX:+CMSClassUnloadingEnabled
。 - nurettin
-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
。需要启用CMSClassUnloadingEnabled
,才能使用UseConcMarkSweepGC
。” - Aaron Digulla