jvm简介
- jvm的5大内存模型分区: 程序计数器,堆,虚拟机栈,方法区,本地方法 栈;
程序计数器: 代码行号的记录器,记录执行到那了,字节码解析器通过计数器来执行下一个方法;
堆 : 所有实例对像的开劈位置(jvm创建堆,堆创建对对象)
虚拟机栈:管理局部变量,操作数栈,动态链接,方法出口等信息。
本地方法栈:与虚拟机栈类似,不过本地方法栈只为本地方法服务,虚拟机栈是服务java方法的;
方法区:记录虚拟机加在的类信息,常量,静态变量,即class文件; - 堆与栈的区别;
物理地址: 堆的物理地址是不连续的,所以性能慢(整个jvm的对象都在堆内,所以物理地址不连续)
内存: 堆理地址不连续,所以堆的内存空间大小是在运行是确定的;
栈的地址是连续的,所以栈的内存空间大小是是在编译期决定的;
存放内容: 堆存放的是数组和对象的实例,关注数据的存储
栈存放的是局部变量,操作数栈,返回结果。关注程序方法的执行 - 队列与栈的区别
队列是双向通道,FIFO 进栈出栈
栈是单项通道, 入栈弹栈 - 虚拟机栈: 存放局部变量表,数栈,动态链接,方法出口
- 程序计数器: 行号记录器 ,每个线程拥有独立的程序计数器;