【问题标题】:Java interfaces... Dynamic or static memory?Java接口...动态或静态内存?
【发布时间】:2011-01-20 04:23:48
【问题描述】:

java 接口驻留在内存中的什么位置?它们是驻留在堆中还是堆栈中,或者可能是全局内存中?我认为它们在堆栈中,因为它们是在编译时创建的。我说的对吗?

【问题讨论】:

    标签: java interface memory-management


    【解决方案1】:

    类定义——包括接口和抽象类——保存在 PermGen 空间中,这意味着它们永远不会被垃圾回收。 PermGen 是 iirc 堆的一部分。

    【讨论】:

    • @Drew Wills:PermGen 不是只针对 Sun 虚拟机吗?
    • @WizardOfOdds 可能是——(对我来说)很容易忘记还有其他类型。 PermGen 是分代 GC 策略的一部分:它指的是 permanent 代。其他 JVM 有分代 GC 吗?
    • @WizardOfOdds 这个问题的答案不会是 JVM-implementation-specific 吗?
    • 类定义,或者类元数据excatly保存在PermGen(非堆空间)中,顺便说一句,PermGen不是堆的一部分,见oracle.com/technical-resources/articles/java/jconsole.html
    【解决方案2】:

    类定义(包括接口等)存储在堆上(通常在永久代中,因为它们的生命周期很长)。如果创建它们的 ClassLoader 被垃圾回收,那么它们也有资格被垃圾回收。

    【讨论】:

      【解决方案3】:

      在创建常规类实例的意义上,接口在技术上不是“实例化”的,但类信息存储在 java permgen 空间中。请参阅http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation 了解有关永久生成的更多信息以及类实例和类信息之间的区别。

      【讨论】:

        猜你喜欢
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        • 1970-01-01
        • 2017-11-05
        • 2016-02-01
        相关资源
        最近更新 更多