jvm是java虚拟机,在实际开发过程中,学习掌握jvm的相关知识也是非常必要的,本小节就一些最基础的理论来进行梳理
oracle的jdk用的HotSpot虚拟机
首先看到jvm这最常想到的就是内存模型、垃圾回收、字节码与类的加载机制、以及性能调优和监控等知识,也是面试当中容易考察的点
内存结构:
程序计数器:记录线程的执行位置,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存
✴️作用:
规定了java在运行过程中内存申请、分配、管理的策略保证了jvm的高效稳定运行
问题:java是一门半解释型半编译型语言怎么理解
jvm参数
参数分类
根据jvm参数开头可以区分参数类型,共三类:"-"、"-X"、"-XX"
标准参数(-)
:所有的JVM实现都必须实现这些参数的功能,而且向后兼容
例子:-verbose:class,-verbose:gc,-verbose:jni
非标准参数(-X)
:默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
例子:Xms20m,-Xmx20m,-Xmn20m,-Xss128k
非Stable参数(-XX)
:此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用
例子:-XX: PrintGCDetails,-XX:-UseParallelGC,-XX: PrintGCTimeStamp
堆区
它存储着几乎所有的实例对象,堆区由各子线程共享使用
jvm配置参数
常用jvm命令:
1 jstack 2 jmap 3 jps