Java内存区域和内存模型

本文为Java后端面试自学内容,记于此以便学习和回忆,如有侵权或错误,欢迎讨论指教;如果转载请注明出处!

结论:内存区域和内存模型是不同的两个概念。

内存区域

在这里插入图片描述
方法区(共享):加载的类信息 常量 静态变量 即时编译后的代码
堆(共享): 对象的实例
程序计数器(私有):当前线程所执行的字节码行号指示器
虚拟机栈(私有):每个方法执行时都会创建一个栈帧
本地方法栈(私有):native方法相关

此外Java中的堆从垃圾回收的角度分为新生代和老年代。
在这里插入图片描述
其中新生代存放新生的对象分为:Eden Servivorfrom和Servivorto三个区,其中from和to名字在垃圾回收后会互换,也就是垃圾回收时扫描eden区和from区,把存活的对象保存到to区,然后to区更名为from区,以便下此扫描。
新生代触发MinorGC 进行垃圾回收(复制算法)。
老年代触发MajorGC进行垃圾回收(标记清除算法)。

内存模型

内存模型:为了保证共享内存的正确性(可见性、有序性和原子性)内存模型定义了共享内存系统中多线程读写操作的规范。
jmm是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在本地数据不一致,编译器会对代码指令重排序,处理器会对代码乱序执行等带来的问题。目的是保证并发编程场景中的原子性、可见性和有序性。jvm为每个线程定义工作内存,数据在主内存中,线程对数据的操作必须在工作内中进行。
详细可以参考(写的非常好)https://blog.csdn.net/javazejian/article/details/72772461

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值