【发布时间】:2017-12-08 22:54:42
【问题描述】:
如果有一个类有一些方法,那么每当我们创建一个新对象时,该对象就会在堆上创建,并带有字段和方法。如果我们有一个具有静态和普通方法的类,并且我们创建了这个类的一个对象,实例变量和普通方法仍然存在,但是静态方法是如何创建的呢?
【问题讨论】:
-
您需要重新审视您的第一个假设:object 根本不包含方法。它不是对象状态的一部分。
-
那么既然我们调用了方法,那么方法代码在哪里。是否有两个空间称为程序空间和数据空间。当我们调用方法时,实例变量会从数据空间复制到寄存器,程序计数器从程序空间指向方法的开始地址。
-
每个对象都有说明其实际类型的信息,JVM 将其与方法相关联。但是,必须用与所有其他相同类型的对象相同的信息来填充一个对象,这将是没有意义的并且真的浪费。 (想想
java.lang.String中的所有方法——你真的希望每个字符串对象分别包含每个方法的某些表示的副本吗?)
标签: java heap-memory static-methods