JVM oop内存模型

这篇具有很好参考价值的文章主要介绍了JVM oop内存模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、oop模型

1.1 oop分类

JVM oop内存模型,jvm

1、非数组对象 InstaceOopDesc

2、数组对象  arrayOopDesc

        2.1 基本数据类型数组 typeArrayOopDesc

        2.2 引用类型数组 objArrayOopDesc

 3、MarkOopDesc

        存放锁信息、分代年龄等

1.2 oop和Klass关系

1、InstanceKlass是JVM中表示类的对象的数据结构。JVM在加载class时,会创建instanceKlass,表示其元数据,包括常量池,字段,方法等,存放在方法区,instanceKlass是JVM中的数据结构
2、 InstanceOopDesc是JVM中表示实例对象的数据结构。在new一个对象时,JVM创建instanceOopDesc表示这个对象,存放在堆中,其引用存放在栈中instanceOopDesc对应Java中的对象实例
3、new操作返回的instanceOopDesc类型指针指向instanceKlass,而instanceKlass指向对应类型的Class实例的instanceOopDesc
4、在JDK6中,Class对象存放在方法区,JDK7和JDK8中,Class对象存放在Java堆中。

二、对象的内存结构

JVM oop内存模型,jvm

 对象内存结构分成三大部分

对象头 (64位操作系统)

mark world 占8B

kclass pointer类型指针 

        开启指针压缩(默认)4B

        关闭指针压缩 8B

数组长度 4B

        对象不是数组,占0B

        对象是数组,占4B

实例数据 instance Data

4类8种

boolean 1B

char 2B 0-65535

byte  1B  -128~127(-2的7次方到2的7次方-1)

short 2B -32768~32767(-2的15次方到2的15次方-1)

int 4B -2147483648~2147483647(-2的31次方到2的31次方-1)

long 8B -9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

float 4B 3.402823e+38~1.401298e-45

double 8B 1.797693e+308~4.9000000e-324
引用类型
        开启指针压缩4B

        关闭指针压缩8B

对齐填充区域

 填充位数保证是8的整数倍

三、如何计算对象大小

public class A {
    // 普通对象
    int a = 1;
    int b = 2;
    public static void main(String[] args) {
        A a = new A();
    }
}

没实例数据的对象

开启指针压缩

16B = 8B + 4B + 0B + 0B + 4B
关闭指针压缩
16B =8B +8B +0+0+0

普通对象 (数组对象,在关闭指针压缩的情况下会出现两端填充)

开启指针压缩

24 =8B + 4B + 0B + 4*2 +4B
关闭指针压缩
24 =8+8+0+4*2+ 0

四、指针压缩的实现原理

为什么要开启指针压缩为了节省内存
寻址效率就有所提高

指针压缩的实现原理
两句话
两个信息 :
1、java中所有的对象都是8字节对齐的

2、最后三位是0,存储的时候后三位0抹除,使用时,后三位补0

指针压缩C++代码结构

JVM oop内存模型,jvm文章来源地址https://www.toymoban.com/news/detail-519594.html

到了这里,关于JVM oop内存模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM内存模型深度解读

            JVM(Java Virtual Machine,Java虚拟机)对于Java开发者和运行 Java 应用程序而言至关重要。其重要性主要体现在跨平台性、内存管理和垃圾回收、性能优化、安全性和稳定性、故障排查与性能调优等方面。今天就下学习一下 JVM 的内存模型。         JVM 内存模型(

    2024年03月19日
    浏览(47)
  • JVM五大内存模型

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器、堆栈等。 Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码( 字节码 ),就可以在多种平台上不加

    2024年02月15日
    浏览(42)
  • 四、JVM-对象内存模型

    一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充 数据 内存 – CPU 寄存器 -127 补码 10000001 - 11111111 32位的处理器 一次能够去处理32个二进制位 4字节的数据 64位操作系统 8字节 2的64次方的寻址空间 指针压缩技术 JDK1.6出现的 开启了指针压缩 什么时候指针压缩会

    2024年02月14日
    浏览(33)
  • JVM之内存模型

    首先说明下 JVM内存模型 和 Java内存模型 这是两个不同的概念,不要搞混淆了。 JVM内存模型定义了Java程序在运行时如何分配、使用和释放内存,跟存储和执行相关,也就是常说的运行时数据区域。 Java内存模型(Java Memory Model,简称 JMM)是一种规范,定义了线程和主内存之间

    2024年02月08日
    浏览(31)
  • 认识JVM的内存模型

    从上一节了解到整个JVM大的内存区域,分为线程共享的heap(堆),MethodArea(方法区),和线程独享的 The pc Register(程序计数器)、Java Virtual Machine Stacks(Java虚拟机栈)、Native Method Stacks(本地方法栈),如下图 同时也大概了解到各个内存区域主要存储的数据类型,根据之前

    2024年02月10日
    浏览(36)
  • JVM——内存模型

      这里与局部变量自增不同,局部变量调用iinc是在局部变量表槽位上进行自增。  静态变量是在操作数栈自增。 这里的主内存和工作内存时再JMM里的说法。  因为操作系统是时间片切换的多个线程轮流使用CPU. JMM中通过synchronized(同步)保证原子性。 使用synchronized减i+

    2024年02月11日
    浏览(29)
  • JVM内存模型详解

    JVM内存模型和Java内存模型都是面试的热点问题,名字看感觉都差不多,实际上他们之间差别还是挺大的。     通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关@mikechen。   什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚

    2023年04月13日
    浏览(61)
  • JVM学习05:内存模型

    很多人将 java 内存结构 与 java 内存模型 傻傻分不清,java 内存模型是 **Java Memory Model(JMM)**的意思。 JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。 原子性是指一个操作是 不可中断 的。即使在多个线程一

    2024年02月04日
    浏览(39)
  • 进阶课程1:jvm内存模型

    在Java中,局部变量和成员变量的区别如下: 定义的位置不同:成员变量定义在类中,而局部变量定义在方法中或者方法的声明上。 在内存中的位置不同:成员变量存储在堆内存的对象中,而局部变量存储在栈内存的方法中用。 生命周期不同:成员变量随着对象的创建而存在

    2024年02月11日
    浏览(41)
  • Jvm学习笔记(一)内存模型

    java不需要用户手动去管理内存的释放,这大大解放了程序员的心智负担,jvm运行的核心绕不开他的内存模型,本章着重于jvm的内存模型分析。 程序计数器是一块较小的内存区域,主要作用是确定下一条需要执行的字节指令(java执行的是字节指令),它是程序控制流的指示器

    2023年04月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包