Skip to content

Commit fc89b4d

Browse files
committed
更新JVM内存
1 parent 7c389f8 commit fc89b4d

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

MD/Java基础-JVM原理.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
JVM本身是介于JAVA编译器和操作系统之间的程序,这个程序提供了一个无视操作系统和硬件平台的运行环境
44

55
### 内存分配
6+
以1.8为例,内存区域如下::
67

78
![](https://github.com/xbox1994/2018-Java-Interview/raw/master/images/j1.jpg)
89

9-
所有线程共享的数据区:
10+
按线程是否共享分为以下区域:
1011

11-
1. 方法区: 存储已被虚拟机加载的类信息、静态变量、编译后代码等数据。并使用永久代来实现方法区,1.8后被元空间替代,元空间并不在虚拟机中,而是使用本地内存,要画到上图那就是图外了。
12-
2. 堆区: 我们常说用于存放对象的区域,1.7之后字符串常量池移到这里。
12+
所有线程共享的数据区:
1313

14-
每个线程私有的数据区:
14+
1. 方法区: 存储已被虚拟机加载的类信息、方法信息、常量、静态变量、字节码、JIT编译后的本地代码,并使用永久代来实现方法区。1.8中用元空间替代了永久代,元空间并不在虚拟机中,而是使用本地内存,元空间中可能还存在短指针数据区CCS
15+
2. 堆区: 最大的一块区域,用于存放对象的区域,1.7之后常量池移到这里
1516

16-
1. 虚拟机栈: 方法执行时创建一个栈帧,用于存储局部变量、操作数栈、动态链接、方法出口等信息。每个方法一个栈帧,互不干扰。
17-
2. 本地方法栈: 用于存放执行native方法的运行数据。
18-
3. 程序计数器: 当前线程所执行的字节码的指示器,通过改变计数器来选取下一条需要执行的字节码指令。
17+
每个线程都会有一块私有的数据区:
18+
19+
1. 虚拟机栈: 每个方法执行时在其中创建一个栈帧,用于存储局部变量、操作数栈、动态链接、方法出口等信息
20+
2. 本地方法栈: 用于存放执行native方法的运行数据
21+
3. 程序计数器: 存放当前正在执行的指令的地址
1922

2023
直接内存:
2124

0 commit comments

Comments
 (0)