深入理解jvm
1、jvm
1.1、什么是jvm
JVM是Java Virtual MachineJava虚拟机的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
1.2、jvm的内存导图
2、类加载器
2.1、什么是类加载器
**Java类加载器(**Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。
2.2、类加载器的分类
-
Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。
-
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。
-
AppClassLoader:主要负责加载应用程序的主函数类
2.3、双清尾排机制
在实例对象的时候,它向父加载器委托,看是否存在这个包,如果存在就会替代实列的类
3、沙盒安全机制
就是分配权限来保证安全
4、本地方法栈,native
4.1、为什么要用本地方法栈
- 因为java 无法操作系统,因此java只能通过调用底层c++,c与系统打交道
- java诞生的时代,c,c++横行
- 通过native 可以调用其他语言为己使用
5、了解栈
5.1、栈的内存地址
栈是存放类的实列(new 的对象),存放的是实列的内存地址,它指向堆具体的对象
5.2、栈的运行机制
栈的运行过程对象先进先出
6、堆
6.1、堆的内存
堆:新生区(伊甸区,幸存区),老年区
6.2、堆的内存图
6.3、堆的垃圾清理
伊甸区满了发生一次轻gc,幸存区from满了发生是一次是轻gc,老年区满了会发生重gc
7、jvm调优
7.1、gc的算法
引用计数器法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。但是他有一个缺点是不能解决循环引用的问题。
7.2、四种算法
-
计数法
每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。
-
复制法
按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。
-
标记清理法
每一个对象都会进行标记,如果为0,就会 清除掉
第一次:标记
第二次:清除
-
标记压缩法
在标记清理法,在标记清理法的基础进行排序
第一次:标记
第二次:清除
第三次:排序