压力测试 & 性能监控
性能监控
jvm 内存模型
- 程序计数器Program Counter Register:
- 记录的是正在执行的 虛拟机字节码指令的地址,
- 此内存区域是唯一个在 JAVA虚拟机规范中没有规定任何OutOfMemoryError的区域
- 虚拟机: VMStack
- 描述的是 JAVA方法执行的内存模型,每个方法在执行的时候都会创建一一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法接口等信息
- 局部变量表存储了 编译期可知的各种基本数据类型、对象引用
- 线程请求的栈深度不够会报StackOverflowError异常
- 栈动态扩 展的容量不够会报OutOfMemoryError异常
- 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈
- 本地方法: Native Stack
- 本地方法栈类似于虚拟机栈,只不过本地方法栈使用的是本地方法
- 堆:Heap(优化的重点)
- 几乎 所有的对象实例都在堆上分配内存优化重点
堆(deep)
所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域,也被称为“GC堆”; 也是我们优化最多考虑的地方。
堆可以细分为:
- 新生代
- Eden空间 (伊甸园区)
- From Survivor空间(幸存者区)
- To Survivor空间
- 老年代
- 永久代/元空间
- Java8以前永久代受jvm管理,java8 以后元空间,直接使用物理内存。因此,默认情况下,元空间的大小仅受本地内存限制。
垃圾回收
从Java8开始,HotSpot已经完全将永久代(Permanent Generation)移