JVM
内存结构:
- 堆(线程共享):又可以细分为 新生代和老生代,大部分java对象都是存在堆中;
- 栈(线程私有):又可以细分为虚拟机栈和本地方法栈,虚拟机栈是有栈帧组成,每一个方法的栈帧是在编译期就确定的,方法的执行就是进栈和出栈的过程;
- 方法区(线程共享):主要存放类信息、方法的字节吗、以及静态常量;JDK8中,将String常量池从方法区移到堆中。
- 程序计数(实际上是PC寄存器,线程私有):指示代码运行的位置,条件、循环、分支等都是通过计数器指示如何取下一条指令。
GC算法
- 复制算法
- 标记 - 清除算法
- 标记 - 整理算法
垃圾回收器类型
-XX:+HeapDumpOnOutOfMemoryError 生成内存快照;设置路径:-XX:HeapDumpPath=<path>
-XX:OnOutOfMemoryError ="sh ~/cleanup.sh" 当内存溢出时,执行脚本
查看垃圾回收的执行情况:
jstat -gcutil pid 1000 10 1000是输出时间间隔,单位毫秒,10 是输出记录的数目
- S0 — Heap上的 Survivor space 0 区已使用空间的百分比
- S1 — Heap上的 Survivor space 1 区已使用空间的百分比
- E — Heap上的 Eden space 区已使用空间的百分比
- O — Heap上的 Old space 区已使用空间的百分比
- P — Perm space 区已使用空间的百分比
- YGC — 从应用程序启动到采样时发生 Young GC 的次数
- YGCT-- 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
- FGC — 从应用程序启动到采样时发生 Full GC 的次数
- FGCT-- 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
- GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步