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  

posted @ 2019-01-04 17:12  zlAdmin  阅读(132)  评论(0)    收藏  举报