java文件转换成class
一. 程序计数器
1.1定义
Program Counter Register 程序计数器(寄存器)
基本作用:用于记住下一条jvm指令的执行地址
特点:
- 线程是私有: 程序计数器是属与自己线程的
- 不会存在内存溢出
当解释器执行完一条指令后,会去程序计数器中查找下一条指令的地址。 当解释器执行下一条指令的时候,程序计数器又会去记录新的下一条指令的地址
在物理上,程序计数器是通过一个叫寄存器实现的, 寄存器是整个cpu组件里,读取速度最快的一个单元,
二.虚拟机栈
Java Virtual Machine Stacks (Java 虚拟机栈)
2.1 定义
- 定义:每个线程运行需要的内存空间,成为虚拟机栈,
- 每个栈帧(Frame)组成,对应着每次方法调用时所占的内存
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
问题1: 垃圾回收是否涉及栈内存 答: 不需要,栈弹出后就被释放掉了,不需要垃圾回收来管理栈内存
问题2: 栈内存分配越大越好吗? 答: 不是栈内存越大,只是可以进行很多次的内存调用,并不会提高运行效率,而且栈内存越大,最大线程数据则会相应的减少。一般采用系统默认的大小即可,除windowsw外,其他系统默认为1024k, windows则看虚拟内存
问题3: 方法内的局部变量是否线程安全 答: 如果方法內部变量没有逃离方法作用的范围,他是线程安全的 如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全
2.2 栈内存溢出
栈帧过多,造成栈内存溢出 栈帧过大,
2.3 线程运行诊断
案例1: cpu 占用过高
定位
案例2: 程序运行很长时间没有结果
三.本地方法栈
四.堆
五.方法区
|