JVM原理
- 类加载流程和内存分配
- 栈帧操作
- 一、JVM垃圾回收算法
- 主动加载的几种方式?
- 符号引用和直接引用
- 1.1 什么是垃圾(Garbage Collection)回收?
- 1.2 引用计数法(Reference Conting)
- 1.3 标记清除法 *(Mark - Sweep)
- 1.4 复制算法 *(Copying)
- 1.4.1 复制算法在JVM中的应用
- 1.5 标记压缩法 *(Mark - Compact)
- 1.6 分代算法
- 1.7 分区算法
- 二、JVM垃圾收集器
- 2.1 串行回收器
- Serial
- 2.2 并行回收器
- ParNew & ParallelGC & ParallelOldGC
- CMS
- JVM参数
- 2.3 G1的GC收集过程
- 新生代GC
- 并发标记周期
- 混合收集
- 三、JVM常用参数
- 四、JVM监控优化
- 性能监控工具
- Linux
- top命令(常用)
- vmstat命令
- iostat命令
- JDK
- jps(常用)
- jstat
- jinfo
- jmap(常用)
- jhat
- jstack(常用)
- jcmd
类加载流程和内存分配
堆内存= Eden内存 + S0/S1内存 + 老年代内存
新生代中有90%的使用中,其余的10%是空闲的。
栈帧操作
针对Java中的方法引入了栈帧的概念。
方法执行的过程对应入栈和出栈的过程。
栈帧遵循先入后出的规则。
栈帧包括:局部变量表、操作数栈、帧数据区。
一、JVM垃圾回收算法
主动加载的几种方式?
- Student stu = new Student();
- 反射的方式
- 克隆clone
- 子类初始化的时候,父类会被优先初始化。
- 调用静态的方法 static
符号引用和直接引用
使用命令查看 ( javap -V 类名 )
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;import java.io.Serializable;@TableName("my_user")
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity implements Serializable {@TableId(type = IdType.AUTO, value = "id")private int id; // 数据库Id@TableField(value = "user_name")private String userName; // 账号@TableField(value = "pass_word")private String passWord; // 密码}
使用命令 : javap -v UserEntity.class
#1 = Fieldref #4.#79 // com/miyuan/wm/pojo/UserEntity.id:I