【理解HotSpot虚拟机】对象在jvm中的表示:OOP-Klass模型
来源:互联网 发布:怎么退出windows media 编辑:程序博客网 时间:2024/05/29 06:30
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72896616
1 概述
HotSpot是基于c++实现,而c++是一门面向对象的语言,本身具备面向对象基本特征,所以Java中的对象表示,最简单的做法是为每个Java类生成一个c++类与之对应。
但HotSpot JVM并没有这么做,而是设计了一个OOP-Klass Model。这里的 OOP 指的是 Ordinary Object Pointer (普通对象指针),它用来表示对象的实例信息,看起来像个指针实际上是藏在指针里的对象。而 Klass 则包含元数据和方法信息,用来描述Java类。
之所以采用这个模型是因为HotSopt JVM的设计者不想让每个对象中都含有一个vtable(虚函数表),所以就把对象模型拆成klass和oop,其中oop中不含有任何虚函数,而Klass就含有虚函数表,可以进行method dispatch。
2 OOP-Klass模型
2.1 Klass
Klass简单的说是Java类在HotSpot中的c++对等体,用来描述Java类。
Klass主要有两个功能:
- 实现语言层面的Java类
- 实现Java对象的分发功能
哪Klass是什么时候创建的呢?一般jvm在加载class文件时,会在方法区创建instanceKlass,表示其元数据,包括常量池、字段、方法等。
2.2 OOP
Klass是在class文件在加载过程中创建的,OOP则是在Java程序运行过程中new对象时创建的。
一个OOP对象包含以下几个部分:
- instanceOopDesc,也叫对象头
- Mark Word,主要存储对象运行时记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等
- 元数据指针,即指向方法区的instanceKlass实例
- 实例数据
3 实例说明
假如我们有如下代码:
class Model{ public static int a = 1; public int b; public Model(int b) { this.b = b; }}public static void main(String[] args) { int c = 10; Model modelA = new Model(2); Model modelB = new Model(3);}
上述代码得OOP-Klass模型入下所示
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72850375
- 【理解HotSpot虚拟机】对象在jvm中的表示:OOP-Klass模型
- 深入探究JVM | klass-oop对象模型研究
- Java虚拟机 对象的创建与OOP-Klass模型
- Java虚拟机(二)对象的创建与OOP-Klass模型
- 深入理解JVM:HotSpot虚拟机对象探秘
- JVM虚拟机-对象(HotSpot)
- 深入理解JVM(二):hotspot虚拟机对象
- Java对象设计成OOP-Klass
- JVM(二):HotSpot虚拟机对象探秘
- 2.《深入理解Java虚拟机》Hotspot虚拟机中的对象创建与访问定位
- HotSpot JVM中的对象指针压缩
- jvm hotspot虚拟机研究
- [深入理解Java虚拟机]第二章 HotSpot虚拟机对象探秘
- 深入理解Java虚拟机——HotSpot虚拟机对象探秘
- 深入理解Java虚拟机:HotSpot虚拟机对象揭秘
- 《JVM学习系列》二.HotSpot虚拟机对象解密
- JVM学习笔记(二)HotSpot虚拟机对象探秘
- JVM笔记(二)——HotSpot虚拟机对象
- hdu 5515 Game of Flying Circus 二分+阅读理解
- Spring-mvc的数据检验
- BZOJ 1477 青蛙的约会 扩展欧几里得
- 基础配置macbook pro工作环境
- Android懒人专用PopupWindow的工具类
- 【理解HotSpot虚拟机】对象在jvm中的表示:OOP-Klass模型
- Magento(麦进斗) 线上购物支付流
- HBuilder MUI开发时genymotion模拟器连不上Hbuilder解决办法
- Spring 注解 @Responsebody与@RequestBody
- Android 通用网络框架封装
- Java环境搭建:JDK 、eclipse和Maven
- [JAVA][Eclipse]JVM terminated. Exit code=13
- springmvc与struts2的区别
- leetcode Algorithms 4 Median of Two Sorted Arrays