【问题标题】:In which memory is saving Java ClassLoader instanceJava ClassLoader 实例保存在哪块内存中
【发布时间】:2015-04-03 15:13:03
【问题描述】:

我想知道 ClassLoader 实例保存在哪里,在哪个内存中。它是在堆中保存还是在 permgen 中保存?如果我有一个自定义的 ClassLoader(例如 JasperReports 加载他自己的调用 JRClassLoader 的 ClassLoader),它的实例也会保存在堆内存或 permgen 中?

【问题讨论】:

    标签: java heap-memory classloader permgen


    【解决方案1】:

    类加载器不是规则的例外,所以:

    • ClassLoader 实例是在堆上创建的,
    • ClassLoader 类就像它在 permgen 上创建的任何其他类一样(直到 Java 7)

    【讨论】:

    • 好的,谢谢你的回答。另外我想问一下,当 GC 从 permgen 中卸载类时。
    • 我认为这没有明确定义。 在可能引发 OutOfMemoryException 之前将删除来自 permgen 的类
    • 不确定@Crazyjavahacking 在评论中在谈论什么。从理论上讲,您可以拥有一个自定义 ClassLoader,它使用对其加载的 java.lang.Class:es 的软引用,这意味着它们在 OOME 之前被垃圾收集,以防没有它们的实例或对它们的其他引用,或者可能有垃圾收集器/选项以这种方式运行,但不应假定为这种情况
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2014-08-05
    • 2012-12-06
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多