java - 大多数 JVM 是否为未使用的方法分配内存?

标签 java jvm jvm-hotspot

假设我们有以下类:

class DoubleOhSeven {
  public static void doSomethingClassy();
  public static void neverDoThisClassy();
}

class Dude {
  public void doSomething();
  public void neverDoThis();
}

public class Party {
  public static void main(String[] args){
    DoubleOhSeven.doSomething();
    Dude guy = new Dude;
    guy.doSomething();
  }
}

当然,所有的方法都会被编译成各自的.class:运行时未使用的静态/实例方法是否占用内存?未使用的继承或导入方法怎么办?

最佳答案

未使用的方法仍然作为类/对象的一部分占用内存,即使它们没有被直接调用也是如此。

如果它们被优化掉,那么将无法对这些方法进行反射调用。

有人可能会争辩说,可以生成一种优化,它只将方法 stub 存储在内存中,并且垃圾收集方法内容(如果进行调用,然后将从类文件中重新获取)。但是,我'我不知道执行此操作的 VM,并且由于每当调用此类方法时内存的增益和速度的权衡可能很小,因此很难证明其合理性。

未使用的继承方法将完全相同。

关于java - 大多数 JVM 是否为未使用的方法分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13539692/

相关文章:

javascript - 从 Panotour Pro 热点调用 JavaScript 函数?

Java:使用StringBuilder得到的相同字符串最终不等于

java - 使用 Log4j2 2.8.1 在运行时动态添加文件日志记录

java - 导出 jar 文件时没有持久性提供程序

java - 我应该使用哪个 JVM 参数来指示 JVM 开始垃圾收集

jvm - 使用 SNMP 监控 JVM

java - Python 代码转换为 JVM

java - java对象头标记词详细说明

java - 使用 WS-Security 签署 SOAP 消息

java - 从正在运行的 java 程序的内存中定位并读取特定类型的对象