当前位置: 首页 > news >正文

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.原子性

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

http://www.lryc.cn/news/7569.html

相关文章:

  • 跨境电商新形式下,如何选择市场?
  • MySQL的触发器
  • 内存映射模块读写文件提高IO性能mmap
  • 存储硬件与协议
  • 智能物流半导体发展
  • SAP S/4HANA 概述
  • 太上感应篇
  • FPGA入门系列17--task
  • React学习笔记(番外二)——列表多选批量处理复合组件
  • Pom.xml详解
  • 浅谈软件测试需求管理
  • 面试题复盘
  • Telerik UI for WPF 2023 R1
  • 基于 CentOS7 的 KVM 部署 + 虚拟机创建
  • Python自动化测试实战篇(5)优化selenium+unittest+ddt,搞定100条测试用例只执行前50条
  • C语言--数据的存储2
  • Ubuntu 安装 Qt5.7.0
  • “世界”的伊利,“三难”的潘刚
  • 【新】华为OD机试 - 开心消消乐(Python)
  • 山东大学2022-2023数据仓库挖掘期末考题回忆
  • SSM整合
  • Android平台版本所对应的 API 级别
  • 入职字节外包一个月,我离职了
  • 中创教育PMP分享,复盘没效果?该怎么办
  • Kubelet监控指标说明
  • python中的数据类型(价值6980的全能工程师课程笔记)
  • Tomcat 配置IPV6
  • JavaEE——MyBatis的简单介绍和使用
  • 主数据管理平台如何进行模型管理
  • 在 Kubernetes 上运行《我的世界》