返回信息流最近看了下jvm的内存模型的书,很多地方都说方法区存的是类的元数据信息,对应的Class对象是在堆中分配的,那Class对象和元数据Klass到底有什么区别呢
这是一条镜像帖。来源:北邮人论坛 / java / #56673同步于 2017/6/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
jvm方法区中存的是类的Klass信息,一个类对应的Class对象存在堆
phantoms4
2017/6/29镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
我是这样理解的,类加载的时候加载的.class文件是二进制文件,而不是一个“有结构的类”,加载后会按虚拟机所需的格式存储在方法区里,这个格式因虚拟机不同而异。但是我们程序要调用对象方法或者静态方法需要有类的逻辑结构,所以会生成一个Class对象,放在方法区中(HotSpot虚拟机是放在方法区里,其他可以百度一下),这个对象是程序访问方法区中这些类型数据的外部接口,换句话说,有了Class对象,才有了类的逻辑结构,就像我们定义类时写的属性,方法等信息才在虚拟机里有了对应。同一个类加载器加载的一个类只会生成一个对应的Class对象,所以很多地方都说Class对象是类的外部接口,反射以及书中自己实现的类加载器加载之后返回的都是这里说的class对象。个人理解,欢迎指正哈~