了解Java内存区域、内存模型与硬件架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wueryan/article/details/87615250

一、Java内存区域

在这里插入图片描述
几个要点记录:
(1)触发时机:程序运行时
(2)发起对象:Java虚拟机
(3)线程共享的数据区域:方法区、堆
(4)线程私有数据区域:虚拟机栈、本地方法栈、程序计数器

各区域概述

1、方法区

存储:已被虚拟机加载的类信息、常量、静态变量以及编译后的代码等数据。
特殊要点:(1)运行时常量池。存储:编译期生成的各种字面量和符号引用。
(2)字面量:文本字符串和申明为final的变量;符号引用量:类和接口的全限定名、字段名称和描述符、方法名称和描述符

2、JVM堆

存储:几乎所有的对象实例。
特殊要点:Java虚拟机所管理的内存最大

3、程序计数器

存储;字节码行号指示器

4、虚拟机栈

存储:每个方法执行时都会创建一个栈帧来存储方法的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。
特殊要点:(1)每个方法从调用结束对于一个栈帧在虚拟机栈中入栈和出栈过程。

5、本地方法栈

二、Java内存模型

在这里插入图片描述
JMM描述一组规则,通过这组规则去控制程序中各个变量在共享数据区域(主存)和私有数据区域(工作内存)的访问方式。
确定:
(1)原子性
(2)有序性
(3)可见性

存储范围:
工作内存:方法中的基本数据类型、本地变量的引用类型
主存:对象实例,包含该对象的成员变量无论是基本数据类型或者包装、static变量以及类本身相关信息。

Java线程与硬件处理器

Java线程对的实现是通过语言级别层面程序去间接调用系统内核的线程模型。内核线程是由操作系统内核支持的线程,内核通过操作调度器进而对线程执行的调度,并将线程的任务映射到各个处理器上。

在这里插入图片描述

如果CPU有多个内核,一个CPU可以进行多个任务。

猜你喜欢

转载自blog.csdn.net/wueryan/article/details/87615250