Java - 我的意思是实例在内存中共享相同的实例方法吗?
例如:
new
我知道在将new
关键字应用于类时,将复制类变量(属性)。因此实例可以单独拥有自己的属性值。
但方法怎么样?它还会复制吗?如果是这样,只是浪费内存资源,因为方法总是相同的。
使用TO_DATE(SYSDATE,'dd-mm-rrrr')
关键字时JVM中出现了什么?非常感谢!
注意:首选官方文档参考:)
答案 0 :(得分:7)
但方法怎么样?它还会复制吗?如果是这样,那就浪费吧 内存资源,因为方法总是相同的。
不,每个方法总会有一个副本(在JVM的方法区域中)。这适用于static
和non-static
方法。
是否有一些善意的人告诉我在使用时在JVM中发生了什么 一个新的关键字?非常感谢!
简单地说,通过调用适当的构造函数在堆空间中创建new
对象。返回对该对象的引用。
答案 1 :(得分:1)
类的方法存储在.class实例的堆栈中,该实例存储类的所有方法。只为方法创建了一个副本,它由类的所有实例调用.JVM保留对类中定义的所有方法的引用,并在调用方法时将其与实例链接。
使用新关键字时在JVM中出现了什么?
当我们简单地把新的'关键字,它在堆上创建一个对象。
答案 2 :(得分:0)
所有实例共享相同的代码。
如果编译Java类并在其他类中创建实例,则它们将在同一Java类(.class)-File上调用该函数。
答案 3 :(得分:0)
当然,虚拟调用会使事情变得更复杂,但基本上实例方法就像是带有附加隐式sum(t1)
参数的静态方法。调用t1
就像调用{{1}}一样(对{{1}}进行额外的空检查)。没有理由为每个可能的参数值复制方法。