您的位置:首页 > 编程语言 > Java开发

Java对象设计成OOP-Klass

2017-07-14 18:38 176 查看
HotSpot源码中为什么要把Java对象设计成OOP-Klass这种结构?仅仅是为了避免每个Java对象都生成一个虚函数表吗?

http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/share/vm/oops/klass.hpp


vtbl主要是实现多态这个特性的,如果一个类的所有的实例都是公用一个vtbl? 这样实现的多态不会会有问题

对象的实例并没有虚函数表,实例所属的klass对象有虚函数表
OOP-KLASS模型就是为了减少 每个对象一个虚函数表的消耗  https://code.google.com/archive/p/strongtalk/wikis/VMTypesForSmalltalkObjects.wiki  hotspot用的是这个设计方式  这里有这个模型的历史  
java 的设计理念就是如此,多态主要依赖动态绑定,而分发则是静态的。所以java生成字节码invokevirtual很常见。公用vtbl应该收益比较大吧
所以最终都归结为方法的调用,传统的堆栈结构和Java的基于操作数栈的结构,都是为函数调用服务的。没有函数调用,一切都运行不起来


学习JVM不错的网址:http://www.open-open.com/lib/view/open1352431526366.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: