JVM基础知识

基础知识

JVM两大功能

  1. 软件层面,将.java文件转译成.class文件(字节码文件),让后在机器上运行
  2. 内存管理

JVM基础知识_第1张图片
JVM内结构图
程序计数器

指向当前线程横在执行的字节码指令地址(行号)

虚拟机栈

存储当前线程运行方法时所需要的数据,指令,返回地址

JVM基础知识_第2张图片
image

本地方法栈

native方法,机器底层的方法,结构和虚拟机栈类似

方法区

存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据存放在永久代

JVM基础知识_第3张图片
image
堆内存

存放对象

方法区和堆内存的结构图
JVM基础知识_第4张图片
image
什么对象会被GC回收

JVM基础知识_第5张图片
image

  1. 数据共享逻辑图,每条数据内都有一个程序计数器,虚拟机栈,本地方法栈,也就是说每个线程的数据都是独享的,线程安全的
  2. Eden区内存不足时,触发MinerGc(young GC)
  3. 触发一次youngGC ,from区和to区会发生调换,from区变成to区,检查的顺序依然是先检查from区再去检查to区
  4. 参数含义
    xms: staring(初始堆内存)
    xmx:max(最大堆内存)
    xmn:new(新生代大小)
  5. 新生代的GC算法为:复制回收算法
  6. 判断对象需要被回收的算法:引用计数法,可达性分析
  7. 成为GC Root条件
  • 虚拟机栈中本地变量表引用的对象
  • 方法区中类静态变量引用对象和常量引用对象
  • 本地方法栈中的JNI引用对象
  1. major GC在永久代发生,速度比miner GC慢10倍

垃圾回收

  1. 长期存活的对象,判定是否应该进入老年代
  • XX:MaxTenurningThreshold=15(默认是15次)
  1. GC 算法:标记清除算法,复制回收算法(新生代使用),标记整理算法
  2. 垃圾回收器类型
    JVM基础知识_第6张图片
    image

ParNew:多线程回收,-XX:ParallelGCThreads=5,指定并行线程数;
Paraller Scavenge:在意的是吞吐量,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间);

  1. 老年代内存不足时,触发full gc(serial old)

你可能感兴趣的:(JVM基础知识)