JVM内存结构、Java内存模型和Java对象模型的区别

JVM内存结构、Java内存模型和Java对象模型是截然不同的三种概念。

1. JVM内存结构

Java程序执行过程中,内存会被划分为不同的数据区域,各个区域有各自的用途。

  1. 有些区域随虚拟机的启动而存在
  2. 有些区域随线程的启动而启动,随线程的结束而销毁
    在这里插入图片描述

JVM内存结构
需要注意的点

  1. Java虚拟机规范,不同的虚拟机实现可能不同,但是一般都会遵守规范
  2. 规范中方法区只是一种概念上的区域,说明了其应该具有的功能,但并没有说明其具体应该位于何处。不同的虚拟机实现,会有一定的自由度。有些虚拟机是在堆内实现的
  3. 运行时常量池用于存放编译期的各种字面值和符号引用。不过Java并没有要求常量只能在编译期才能产生,通过String.intern也能产生
  4. 除了图中所列的内存区域,还有一块内存可供使用,那就是直接内存。JVM规范并没有定义这一块区域,所以并不由JVM管理,是利用本地方法库直接在堆外申请的内存
  5. 堆和栈的数据划分并不是绝对的,JIT会针对对象分配做一定的优化

JVM内存结构由JVM虚拟机规范定义。描述的是java程序执行过程中,由JVM管理的不同数据区域,各个区域的功能会有区别。

2. Java内存模型

Java堆和方法区是多个线程共享的数据区域。多个线程可以操作堆和方法区中的同一个数据。Java的线程间通过共享内存进行通信
在这里插入图片描述

Java内存模型
Java内存模型的英文名称为Java Memory Model(JMM),其并不想JVM内存结构一样真实存在,而是一个抽象的概念。通过JSR-133 Java Memory Model and Thread Specification中的描述,我们知道JMM和线程有关,它描述了一组规范或规则,一个线程对共享变量的写入时对另一个线程是可见的。
Java多线程对共享内存进行操作的时候,会存在一些如可见性、原子性和顺序性的问题,JMM是围绕着多线程通信及相关的一些特性而建立的模型。而JMM定义了一些语法集,而这些语法集映射到Java语言的volatile、synchronized等关键字

3. Java对象模型

Java对象在JVM中的存储有一定的结构,Java对象自身的存储模型就叫做Java对象模型。
在这里插入图片描述

Java对象模型
总结
JVM内存结构,和Java虚拟机的运行时区域有关。 Java内存模型,和Java的并发编程有关。 Java对象模型,和Java对象在虚拟机中的表现形式有关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值