File tree Expand file tree Collapse file tree 1 file changed +10
-7
lines changed Expand file tree Collapse file tree 1 file changed +10
-7
lines changed Original file line number Diff line number Diff line change 33JVM本身是介于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
You can’t perform that action at this time.
0 commit comments