Java - 创建多个实例时在内存中创建了多少个实例方法?

时间:2015-10-29 06:49:31

标签: java

Java - 我的意思是实例在内存中共享相同的实例方法吗?
例如:

new

我知道在将new关键字应用于类时,将复制类变量(属性)。因此实例可以单独拥有自己的属性值。

但方法怎么样?它还会复制吗?如果是这样,只是浪费内存资源,因为方法总是相同的。

使用TO_DATE(SYSDATE,'dd-mm-rrrr') 关键字时JVM中出现了什么?非常感谢!

  

注意:首选官方文档参考:)

4 个答案:

答案 0 :(得分:7)

  

但方法怎么样?它还会复制吗?如果是这样,那就浪费吧   内存资源,因为方法总是相同的。

不,每个方法总会有一个副本(在JVM的方法区域中)。这适用于staticnon-static方法。

  

是否有一些善意的人告诉我在使用时在JVM中发生了什么   一个新的关键字?非常感谢!

简单地说,通过调用适当的构造函数在堆空间中创建new对象。返回对该对象的引用。

答案 1 :(得分:1)

类的方法存储在.class实例的堆栈中,该实例存储类的所有方法。只为方法创建了一个副本,它由类的所有实例调用.JVM保留对类中定义的所有方法的引用,并在调用方法时将其与实例链接。

  

使用新关键字时在JVM中出现了什么?

当我们简单地把新的'关键字,它在堆上创建一个对象。

答案 2 :(得分:0)

所有实例共享相同的代码。

如果编译Java类并在其他类中创建实例,则它们将在同一Java类(.class)-File上调用该函数。

答案 3 :(得分:0)

当然,虚拟调用会使事情变得更复杂,但基本上实例方法就像是带有附加隐式sum(t1)参数的静态方法。调用t1就像调用{{1}}一样(对{{1}}进行额外的空检查)。没有理由为每个可能的参数值复制方法。