zoukankan      html  css  js  c++  java
  • JVM中对象模型及相应名词概念

    JVM中对象模型及相应名词概念

    java对象在jvm中的模型是OOP-Klass 模型;

    klass

    klass对应元数据,包括常量池、字段、方法等。是在加载class阶段创建instanceKlass。存放在方法区。

    oop

    oop对应java中的实例。
    oop是指向oopDesc的指针。

    // share/vm/oops/oopsHierarchy.hpp
    typedef class oopDesc*                            oop; // SimonNote: oop是指向oopDesc的指针
    

    oopDesc

    instanceOOpDesc只包含数据信息,主要由以下部分组成:

    1. 对象头,也叫markword。主要存储对象运行时记录信息,如hashcode,GC分代年龄,锁状态标志,线程id,时间戳等
    2. 元数据指针,这里指指向方法区的instanceKlass实例
    3. 实例数据,(我的理解 对其获取与存取的方式是按对象头为基址做相对偏移后操作的,可以参见oop.inline.hpp的obj_field_addr方法)
    4. 如果是数组对象,还多一个数组长度

    oopDesc的结构图示:

    先是头部,头部后面接着数据,数据后面接着对其填充;头部包含mark和元数。

    oop是普通对象指针之意,对象指针好理解,但是最前面那个o是普通的意思,怎么理解这个普通?参见R大解释

    为什么把GC托管指针叫做oop?对象指针不就是指针么,为啥还要加一个“普通”来修饰?
    这有个有趣的历史原因。对Smalltalk与HotSpot VM的渊源有所了解的话就会知道。在Strongtalk VM的文档里有详细描述:https://code.google.com/p/strongtalk/wiki/VMTypesForSmalltalkObjects
    关键点在于在Smalltalk的对象由GC来管理,而其许多实现里都会用所谓“直接对象”的方式来实现一些简单的值类型对象,例如SmallInteger。所谓“直接对象”(immediate object)就是并不在GC堆上分配对象实例,而是直接将实例内容存在对象指针里的对象。这样的指针也叫做“带标记的指针”(tagged pointer)。
    于是在这种环境中,每当我们拿到一个对象指针时,都得先问它:你是一个直接对象还是一个真的指针?如果是真的指针,它就是一个“普通”的对象指针了。这样对象指针就有了“普通”与“不普通”之分。
    这个语境中的oop也被认为是“object oriented pointer”的缩写。无论是“ordinary object pointer”还是“object oriented pointer”,其实要说的事情是一模一样的。以前术语特别混乱,oop到底最最初是谁的缩写就不大好考证了。
    关于tagged pointer,HLLVM群组的一个老帖也有讨论:http://hllvm.group.iteye.com/group/topic/17840#post-126408

    之间关系

    举例:
    Person示例---- ---> ------- Person的instanceKlass------- ------- -->---------- ------- Person的class
    instanceOopDesc -- ------JDK8在metaspace,JDK6 7 在方法区 --------- ------- JDK7 8 在堆中,JDK6在方法区

  • 相关阅读:
    软工小白菜的团队介绍和采访
    团队作业第二次——团队Github实战训练
    团队作业第一次—团队展示和项目展示
    week5:Technology: Internets and Packets
    week3:History: The Web Makes it Easy to Use
    week2:History: The First Internet
    week4:History: Commercialization and Growth
    week1:History: Dawn of Electronic Computing
    第二日会议博客
    第一日会议博客
  • 原文地址:https://www.cnblogs.com/simoncook/p/11804427.html
Copyright © 2011-2022 走看看