hotspot中的OO对象,涉及到类的加载、gc等,相当复杂。
class oopDesc是基类。为Object header
class oopDesc {
friend class VMStructs;
private:
volatile markOop _mark;
union _metadata {
wideKlassOop _klass;
narrowOop _compressed_klass;
} _metadata;
...
}
由上面可以看出对象由下面3部分组成。
1、Mark Word
2、Class Metadata Address
3、Array Length,一些具体的内容,象常量池里面的值等。
mark work具体内容如下
Bitfields Tag State
Hashcode Age 0 01 Unlocked
Lock record address 00 Light-weight locked
Monitor address 10 Heavy-weight locked
Forwarding address, etc. 11 Marked for GC
Thread ID Age 1 01 Biased / biasable
在此关注两个类的实现
klassKlass、klassOop
在hotspot里面经常看到象这样的用法
klassOop next = ...
next->klass_part()->...
这样的用法
typedef class klassOopDesc* klassOop;
由上面可知klassOop其实是一个指针。
Klass* klassOopDesc::klass_part() {
return (Klass*)((address)this + klass_part_offset_in_bytes());
}
int klassOopDesc::klass_part_offset_in_bytes(){
return sizeof(klassOopDesc);
}
因为klassOopDesc没有成员变量,所以klass_part() 也就是说在某个继承klassOopDesc的对象,在它的this指针往后固定字节(sizeof(klassOopDesc))就是Klass对象。由这推想,java里面的每个对象应该是某个klass的子类,jvm在分配内存时候,会分配一个Object header,也就是sizeof(klassOopDesc)的部分。
上面的推想可以在instanceKlassKlass::create_klass里面得到证实。create_klass最调用了Klass_vtbl::operator new(size_t ignored, KlassHandle& klass,int size, TRAPS),上面的size就是
oopDesc::header_size() + sizeof(instanceKlassKlass)/HeapWordSize就包括了Object header (oopDesc::header_size() )。
分享到:
相关推荐
《HotSpot虚拟机对象探秘》是一份详细探讨Java虚拟机内部对象创建、内存布局以及访问定位的资源。这份资料采用Xmind脑图的形式,旨在帮助读者深入理解JVM的底层原理,尤其聚焦于HotSpot虚拟机。内容涵盖对象实例化、...
根据提供的文件信息,“HotSpot实战[完整版][带书签].pdf”这本书主要围绕HotSpot虚拟机进行深入探讨,HotSpot作为Java虚拟机的一种实现,是当前最广泛使用的JVM之一,尤其在企业级应用中占据重要地位。下面将根据...
本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...
《OpenJDK中的JVM Hotspot实现源码解析》 在Java世界中,JVM(Java Virtual Machine)是运行Java程序的关键组件,它负责将字节码解释执行或即时编译为机器码,使得Java具备跨平台的能力。Hotspot是Oracle JDK和...
《HotSpot实战》这本书深入探讨了Java开发中的关键组件——HotSpot虚拟机。HotSpot是Oracle JDK和OpenJDK中的默认Java虚拟机,它在Java应用程序的运行时性能优化方面扮演着重要角色。以下是该书可能涵盖的一些核心...
RouterOS 5.x 配置 Hotspot 认证实现 UserManager 中文认证管理归类是 RouterOS 5.x 版本中的一种实现 Hotspot 认证的解决方案。该解决方案主要通过配置 RouterOS 5.x 的 Hotspot 功能,实现用户认证和管理的目的。...
JDK7作为Java发展历程中的一个重要版本,引入了许多创新特性,而理解其底层C++源码和HotSpot虚拟机源码对于提升开发水平和优化性能具有重大意义。 首先,JDK7源码是Java Development Kit的基石,包含了Java语言的...
Hotspot虚拟机,作为Java平台上的核心组成部分,一直以来都是Java性能优化的重要研究对象。本资源"hotspot-d9c3790c85c1.rar"包含了Hotspot 1.6版本的源代码,为深入理解JVM的工作原理提供了宝贵的材料。通过对这些...
4. **内存管理**:Hotspot源码中包含了堆内存的分配、对象的创建和生命周期管理。`memory目录`和`oops目录`包含了对象相关的数据结构和内存管理策略。 5. **类加载器**:源码中的`classfile目录`和`share/vm/class...
HotSpot VM,作为Java开发人员耳熟能详的名字,是Sun JDK和OpenJDK中的核心组件,它的普及程度无出其右。HotSpot以其高效性能、优秀的垃圾回收机制以及丰富的优化手段,赢得了全球Java开发者的一致青睐。本文将围绕...
HotSpot 虚拟机还支持对象包装,即使用对象表示基本类型值,以支持更多的面向对象编程特性。 #### 三、Java HotSpot 编译器 HotSpot 虚拟机内置了一套高效的编译器,用于将字节码转换为机器代码,从而提高程序执行...
包括OpenJDK与HotSpot项目、编译和调试HotSpot的方法、HotSpot内核结构、Launcher、OOP-Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量池Cache、Perf Data、Crash分析方法、转储分析方法、垃圾收集器...
【描述】中提到的"hotspot8官网源码",意味着这个压缩包包含了HotSpot虚拟机8版本的源代码。对于Java开发者来说,深入理解HotSpot源码能够帮助他们更好地理解和优化Java应用程序,因为这涉及到JVM如何处理内存管理、...
Hotspot JVM,全称Hotspot Virtual Machine,是Java开发工具包(JDK)中的关键组成部分,负责运行Java应用程序。它由Oracle公司开发,以其出色的性能优化和动态编译能力而闻名。Hotspot VM的名字来源于其核心理念...
源代码中包含了对象头的设计、对象分配策略(如Tlab,线程本地分配缓冲区)以及垃圾收集器的具体实现。 3. **执行引擎**:Hotspot的执行引擎主要包括解释器和JIT编译器。源代码揭示了如何将字节码转换为本地机器码...
Hotspot是Oracle JDK中的一个关键组件,它是一款高效的Java虚拟机(JVM)。JDK8u-hotspot源码提供了对Hotspot内部工作原理的深入了解,这对于Java开发者优化性能、调试问题以及理解JVM内部机制至关重要。Hotspot的...
《HotSpot中的偏见锁》 在Java编程语言中,多线程是实现并发执行的重要手段,而锁机制则是确保线程安全的关键组件。HotSpot虚拟机作为Java平台的主流虚拟机之一,提供了多种锁优化策略,其中之一就是“偏见锁”...
深入解析hotspot实战!内容比较翔实、精辟,值得收藏!