Ash*_*ish 35 java garbage-collection
我已经读过Perm gen(或Permanent Generation)空间不是垃圾收集的.但是,在CMS集合中,我可以在GC日志中看到一些类正在卸载.那么在完全收集或CMS收集期间收集的perm gen垃圾是什么?
Ste*_*n C 30
在当前的JVM中,permgen确实像堆的其他部分一样被收集.该visualgc的网页说,它正在与老一代的收集在一起.
在较旧的JVM中,这显然并非总是如此.例如,在Java 5中,CMS收集器默认情况下显然没有收集permGen:您可以使用它来启用它-XX:+CMSPermGenSweepingEnabled.我还记得听说过一些非常古老的JVM根本没有实现permgen集合,虽然我找不到可靠的资源......呃..."factoid".
另一点是,很多人错误地将"OutOfMemoryError:permgen"异常归因于根本没有被收集的permgen.现实是不同的.这些OOME的最常见原因是当您将代码热加载到正在执行的JVM中时会出现一种潜在的存储泄漏.发生泄漏是因为当一个已被替换的旧类的实例仍然可以访问时.这会导致对象的类可以访问,这会导致类类加载器可以访问,这会导致所有旧类都可以访问,连同它们的代码对象,它们的字符串文字,以及它们的静态框架和静态.很多这些泄漏的物体都存在于permgen空间.
UPDATE
从Java 8开始,permgen不再存在:JDK 8中的PermGen消除
| 归档时间: |
|
| 查看次数: |
34795 次 |
| 最近记录: |