JVM内存结构,Java内存模型,Java对象模型

一.整体方向

JVM内存结构是和java虚拟机的运行时区域有关。

Java内存模型和java并发编程有关。

java对象模型和java对象在虚拟机中的表现形式有关。

1.JVM内存结构

堆:通过new或者其他指令创建的实例对象,会被垃圾回收。动态分配。

虚拟机栈:基本数据类型,对象本身在堆中,对象的引用在栈中,特点是创建的时候大小固定,不会被改变。

方法区:数据是共享的,存的是静态信息,类信息以及常量信息,和永久引用。

本地方法栈:调用native方法,不是用java写的方法。

程序计数器:最小的区域,主要是保存当前字节码的行号数,上下文切换,指令,异常处理等等。

2.Java对象模型

首先会在方法区中把类创建出来,里面的每一个实例都会放在堆中,堆中结构是对象头+实例数据。

对于数据的引用保存在栈中。

3.Java内存模型

什么叫JMM?全称Java Memory Model。c语言不存在内存模型的概念,依赖处理器,不同处理器结果不一样,无法保证并发安全。

JMM是一组规范,以便于更方便的开发多线程程序。volatile,synchronized,lock等的原理都是JMM。最重要的三点:重排序,可见性,原子性。

1.重排序

对代码进行优化,提高处理速度。 发生在编译器优化,CPU指令重排,内存的“重排序”。

2.可见性

CPU有多极缓存,导致读的数据过期。会有可见性问题。

Happens-Before规则:1.单线程规则2.锁操作(synchronized和lock)3.volatile变量 4.线程启动 5.线程join 6.传递性 7.中断 8.构造方法 9.工具类的Happens-Before原则

volatile:同步机制,更轻量,不会发生上下文切换,开销笑。

synchronized不仅能保证原子性,还能保证可见性。

3.原子性

要么全部执行,要么全部不执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值