JVM随笔

1.JVM是什么?有啥用?

JVM是一个虚拟计算机,他是字节码执行引擎,还能优化JAVA字节码,把字节码转换成效率更高的机器命令.java的跨平台的特性就是以此为支撑的.

2.JVM结构

JVM从上到下分别是类加载器->内存模型->执行引擎->本地库接口->本地方法区,大致结构如下图

JVM随笔

3.类加载器:JVM的入口,负责把class文件加载到JVM中.

JVM随笔

3.1 类加载器分为三类,从上到下分别是bootstrop classload,extention classload,app classload,这样的分法保证了java核心类库的安全

     1.bootstropClassload(核心类加载器):负责加载java核心类库,JRE/lib下的jar包

     2.extentionClassload(扩展类加载器):负责加载java扩展类库 ,JRE/lib/ext下的jar包

     3.appClassload(系统类加载器):加载当前应用的所有类

3.2 类加载器加载机制:

    双亲委派机制:通俗的讲就是父类能加载的优先让父类加载,顺序如下:bootstropClassload--->extentionClassload--->appClassload

 

4.JVM内存模型:堆,栈(虚拟机栈,本地方法栈),方法区,程序计数器

JVM随笔

 4.1 程序技术器:记录正在执行的字节码的地址.程序 分支,循环,异常处理都以来 这个

 4.2 虚拟机栈:为虚拟机提供JAVA服务,存放局部变量和对象引用

 4.3 本地方法栈:为虚拟机提供本地native方法支持

 4.4 堆:对象实例,数组

 4.5 方法区:也叫永久区,里面放一些静态变量,常量,类信息

堆内部分两块,分别是新生区和老年区,新生区包括伊甸园区,幸存一区,幸存二区

当我们去创建一个对象的时候, 对象首先会存在伊甸区中,当伊甸区满的时候会出发GC进行youngGC ,随后剩下的对象会进入到幸存区,在幸存区经历多次youngGC还能留存下来的对象会进入老年区,老年区如果满了会触发fullGC,经过多轮fullGC后的对象会进入永久区(方法区)

5.垃圾回收器(GC)

5.1 垃圾回收器分类:

  串行:单线程,垃圾回收时用户进程处于等待状态

  并发:单线程,垃圾回收进程和用户进程交替进行

  CMS:多线程,使用标记清除法

  G1:多线程,使用分代回收机制

注:分代回收机制:内存上的新生区和老年区分开,并根据其特点选择不同的垃圾回收器

    新生代存活少垃圾多,使用标记整理法;老年区存活多垃圾少,使用复制算法

5.2 算法:

   标记清除法:容易产生碎片

   标记整理法:效率低(有整理的过程)

   复制法:内存使用不充分(1/2)