运行时数据区有
- JVM Stack(栈)-frame
1.局部变量表
this,i,x.....
2.操作数栈
每一个局部便变量表操作时,都会进栈,用完出栈,在赋值给局部变量表
3.动态链接
符号引用转直接引用,找到调用的方法
4.方法返回
方法返回值
栈遵循先进后出的原则,一个java线程对应一个栈,每一个方法对应一个栈帧,方法执行完之后出栈
- native·method stacks(本地方法栈)
主要是java程序调用hspot c和c++的时候的方法的本地方法栈
- Progaram Counter(程序计数器)
记录下一次程序执行的位置
- Method area(方法区)----run -time constant pool
常量池内容,class文件
1.7(永久代 permanert space).启动前必须指定内存大小,不能更改,字符串常量在这,在1.8之后位于堆,FGC不会清理
1.8(元数据 meta Space)可以指定,也可以不指定,大小取决于物理内存,FGC会清理
- Heap(堆)
堆的内存划分之后再说
- Direct Memory(直接内存)
为了提高io的访问速度,1.7之后jvm新增了直接内存,jvm可以直接访问操作系统管理的内存,用户空间可以直接访问内核空间,归操作系统管(NIO,零拷贝)