zoukankan      html  css  js  c++  java
  • 虚拟机内存中数据细节

    虚拟机内存中数据细节

    • 如何创建?
    • 如何布局?
    • 如何访问?

    如何创建?

    语言层面:创建对象仅仅是一个new关键字而已。

    虚拟机中:

      1 检查指令的参数是否在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载,解析,初始化;

      2 虚拟机为新生对象分配内存.

    如何布局?

    分为3个区域:

      对象头

      实例数据

      对其填充

    对象头:

    分为2部分:

      1、用于存储对象自身的运行时数据(hashCode,GC分代年龄,锁状态标志,线程持有的锁,偏向线程的id,偏向时间戳等)。

      2、类型指针,对象指向它的类元数据的指针,虚拟机通过该指针确定对象是那个类的实例。

    如何访问?

      1、使用句柄访问,java堆会分分配一块内存作为句柄池,reference中存储就是对象的句柄地址,句柄包含对象实例数据与类型数据各自的具体地址信息。

      优点:reference存储稳定的句柄地址,对象移动至改变实例数据指针,不会影响reference本身。

      

      2、直接使用指针访问,java堆对象布局中就必须考虑如何放置访问类型数据相关信息,而reference中存储的直接是对象地址。

      优点:速度快,节省一次指针定位的时间开销

      

  • 相关阅读:
    2015百度之星 放盘子
    2015百度之星 IP聚合
    2015百度之星 列变位法解密
    2015百度之星 大搬家
    数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
    组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
    Linux
    概率论 --- Uva 11181 Probability|Given
    JAVA
    网络爬虫-原理篇(二)
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/6391508.html
Copyright © 2011-2022 走看看