有关Java对象方法的信息保存在哪里?

  发布于 2023-01-29 14:24

我的同事刚问我一个非常有趣的问题,我不能给他一个答案.

我们假设我们有以下课程:

public class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    public void print() {
        System.out.println("xxx");
    }
}

现在,我们正在创建对象:

Person p1 = new Person("a");
Person p2 = new Person("b");
Person p3 = new Person("c");
Person p4 = new Person("d");
Person p5 = new Person("e");
Person p6 = new Person("f");
Person p7 = new Person("g");
Person p8 = new Person("h");

问题是:

我们是否保留每个单个对象中可用方法的信息?如果我们创建一个新对象p9,JVM是否会创建仅包含字段信息的对象,还是会向该对象添加有关方法的信息?

另一个问题:

如果我调用会发生什么p1.print()?是否p1必须要求Person类提供此方法,还是已经保存在p1对象中?

1 个回答
  • 对于所有实例,方法的代码不会重复,这是完全没有必要的.代码位于内存中的特殊区域,并由所有实例共享.另一方面,实例变量所需的内存自然归每个实例所有.

    至于如何调用方法,对象实际上并不需要在每次调用方法时都要求类,它有一个指向方法代码的指针,并且可以立即调用它.

    有关JVM内部工作方式的更多信息,请参阅此处:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html

    2023-01-29 14:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有