`
xieyj
  • 浏览: 103053 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

hotspot中的OO对象分析

阅读更多

  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虚拟机对象探秘-xmind脑图pdf

    《HotSpot虚拟机对象探秘》是一份详细探讨Java虚拟机内部对象创建、内存布局以及访问定位的资源。这份资料采用Xmind脑图的形式,旨在帮助读者深入理解JVM的底层原理,尤其聚焦于HotSpot虚拟机。内容涵盖对象实例化、...

    [百度网盘] HotSpot实战[完整版][带书签].pdf

    根据提供的文件信息,“HotSpot实战[完整版][带书签].pdf”这本书主要围绕HotSpot虚拟机进行深入探讨,HotSpot作为Java虚拟机的一种实现,是当前最广泛使用的JVM之一,尤其在企业级应用中占据重要地位。下面将根据...

    HotSpot实战高清版本

    本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...

    JVM Hotspot实现源码

    《OpenJDK中的JVM Hotspot实现源码解析》 在Java世界中,JVM(Java Virtual Machine)是运行Java程序的关键组件,它负责将字节码解释执行或即时编译为机器码,使得Java具备跨平台的能力。Hotspot是Oracle JDK和...

    《HotSpot实战》

    《HotSpot实战》这本书深入探讨了Java开发中的关键组件——HotSpot虚拟机。HotSpot是Oracle JDK和OpenJDK中的默认Java虚拟机,它在Java应用程序的运行时性能优化方面扮演着重要角色。以下是该书可能涵盖的一些核心...

    RouterOS5.x配置Hotspot认证实现UserManager中文认证管理归类.pdf

    RouterOS 5.x 配置 Hotspot 认证实现 UserManager 中文认证管理归类是 RouterOS 5.x 版本中的一种实现 Hotspot 认证的解决方案。该解决方案主要通过配置 RouterOS 5.x 的 Hotspot 功能,实现用户认证和管理的目的。...

    JDK7底层C++源码及hotspot虚拟机源码

    JDK7作为Java发展历程中的一个重要版本,引入了许多创新特性,而理解其底层C++源码和HotSpot虚拟机源码对于提升开发水平和优化性能具有重大意义。 首先,JDK7源码是Java Development Kit的基石,包含了Java语言的...

    hotspot-d9c3790c85c1.rar

    Hotspot虚拟机,作为Java平台上的核心组成部分,一直以来都是Java性能优化的重要研究对象。本资源"hotspot-d9c3790c85c1.rar"包含了Hotspot 1.6版本的源代码,为深入理解JVM的工作原理提供了宝贵的材料。通过对这些...

    Hotspot源码

    4. **内存管理**:Hotspot源码中包含了堆内存的分配、对象的创建和生命周期管理。`memory目录`和`oops目录`包含了对象相关的数据结构和内存管理策略。 5. **类加载器**:源码中的`classfile目录`和`share/vm/class...

    hotspot源码

    HotSpot VM,作为Java开发人员耳熟能详的名字,是Sun JDK和OpenJDK中的核心组件,它的普及程度无出其右。HotSpot以其高效性能、优秀的垃圾回收机制以及丰富的优化手段,赢得了全球Java开发者的一致青睐。本文将围绕...

    The_Java_HotSpot_Performance_Engine_Architecture

    HotSpot 虚拟机还支持对象包装,即使用对象表示基本类型值,以支持更多的面向对象编程特性。 #### 三、Java HotSpot 编译器 HotSpot 虚拟机内置了一套高效的编译器,用于将字节码转换为机器代码,从而提高程序执行...

    HotSpot实战

    包括OpenJDK与HotSpot项目、编译和调试HotSpot的方法、HotSpot内核结构、Launcher、OOP-Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量池Cache、Perf Data、Crash分析方法、转储分析方法、垃圾收集器...

    hotspot-8.rar

    【描述】中提到的"hotspot8官网源码",意味着这个压缩包包含了HotSpot虚拟机8版本的源代码。对于Java开发者来说,深入理解HotSpot源码能够帮助他们更好地理解和优化Java应用程序,因为这涉及到JVM如何处理内存管理、...

    hotspot.tar.gz

    Hotspot JVM,全称Hotspot Virtual Machine,是Java开发工具包(JDK)中的关键组成部分,负责运行Java应用程序。它由Oracle公司开发,以其出色的性能优化和动态编译能力而闻名。Hotspot VM的名字来源于其核心理念...

    hotspot源代码

    源代码中包含了对象头的设计、对象分配策略(如Tlab,线程本地分配缓冲区)以及垃圾收集器的具体实现。 3. **执行引擎**:Hotspot的执行引擎主要包括解释器和JIT编译器。源代码揭示了如何将字节码转换为本地机器码...

    hotspot 源码(JDK8)

    Hotspot是Oracle JDK中的一个关键组件,它是一款高效的Java虚拟机(JVM)。JDK8u-hotspot源码提供了对Hotspot内部工作原理的深入了解,这对于Java开发者优化性能、调试问题以及理解JVM内部机制至关重要。Hotspot的...

    Biased Locking in HotSpot

    《HotSpot中的偏见锁》 在Java编程语言中,多线程是实现并发执行的重要手段,而锁机制则是确保线程安全的关键组件。HotSpot虚拟机作为Java平台的主流虚拟机之一,提供了多种锁优化策略,其中之一就是“偏见锁”...

    Hotspot实战-pdf版

    深入解析hotspot实战!内容比较翔实、精辟,值得收藏!

Global site tag (gtag.js) - Google Analytics