浅谈Java中的oop-klass二分模型

学习JVM的话,oop-class模型永远是一个绕不过去话题。我们都知道HotSpot VM几乎可以说是纯C++语言编写的Java虚拟机,那么Java的对象模型和C++的对象模型之间究竟有什么关系呢?这个问题简单回答就是oop-class二分对象模型。

究竟什么是oop-class模型呢?

事实上HotSpot底层究竟怎么表示一个Java对象这个问题归根结底就是C++怎么表述一个Java对象。有一个朴素的实现方案就是将每一个Java对象都影射为一个对等的C++对象,然而这么做确实是太朴素了,它有一个严重的弊端就是如果这样做的话那么就不得不为每一个Java对象都保存一份VTable(虚函数表),因为C++的多态实现就是为每一个对象都保留一份VTable。这是很浪费空间的,所以HotSpot设计者采用了oop-class二分模型来表述一个Java对象。其中这里的oop表示Ordianry Object Pointer(普通对象指针,注意可不是object-oriented programming),它用来表示对象的实例信息,看起来像个指针实际上是藏在指针里的对象。而 klass 则包含 元数据和方法信息,用来描述 Java 类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值