假设我们有以下类:
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/