JVM---类加载
计算机模型中定义:任何想要和CPU进行交互的程序都需要加载到内存中;
java类加载其实就是.class文件实例化Class对象并进行相关初始化的过程;
类加载过程:
步骤1:load -> 将.class文件转换成二进制文件流,并转换成特定的数据结构,创建对应的java.lang.class实例;
步骤2:link -> 验证、准备、解析;(验证:校验cafe babe魔法数,final域、常量池、文件长度、是否有父类等),(准备:为常量分配内存)
步骤3:init -> 执行构造器,完成赋值操作;
注:cafe babe魔法数即是我们编辑的.class文件的特定标识前缀,指定该文件是java文件
JVM的类加载器:
1.最高级别加载器:Bootstrap JVM启动时创建,负责装载核心java类,比如Object,System,String等;
2.平台类加载器:加载系统扩展类如:xml,加密、压缩等
2.1:在JDK1.9:使用platform classLoader
2.2:Extension classLoader
3.Application classLoad:应用类加载器,用户自定义的classPath路径下的类
java内存模型
Heap区:绝大部分对象是在Eden区生成,当Eden区装满后会触发YGC,Eden执行清除策略,没有被引用的对象直接清除,存活的对象被送到Survicor,若S0和S1存不下,就直接存到老年区,并将该对象的计数器置为15;
在JVM的启动参数里添加如下命令,让程序在OOM时候输出堆信息;
-XX:+HeapDumpOnOutOfMemoryError
我们曾如此渴望生命的波澜,到后来才发现,人生最曼妙的风景是内心的淡定与从容