JVM结构

看了两天资料整理出来的,希望有大佬指出错误

JVM:

类加载器:负责把.class文件加载到内存中;继承classLoader抽象类;

加载方式:双亲委派机制,由下往上进行委派,由上往下进行加载;如果没有加载到,抛出异常;

加载顺序:启动类加载器 -> 扩展类加载器 ->应用程序类加载器

运行时数据区:程序运行时的数据存储区域

程序计数器: 线程计数

 

本地方法栈:登记本地方法;通过本地方法接口(JNI)调用本地方法;native关键字 -> 本地方法栈 -> 本地方法接口 -> 本地方法

本地方法接口(JNI):调用本地方法,目的是融合不同语言为java所用,调用其他语言方法库

 

栈区:线程运行的生命周期,每一个运行过的方法为栈帧(基本单元),正在运行的方法为top,线程结束释放资源;保存八种基本数据类型、引用、实例方法;

 

方法区:存储静态变量(static)、常量(final)、class模板、运行时常量池

 

堆:存储对象和数组,包含新生区、老年区

垃圾回收机制:

  垃圾标记算法:1.引用计数法 2.可达性分析法

  新生区:new一个对象会进入eden区, eden没有足够空间进行一次轻GC,大对象直接进入老年区,其他存活对象进入幸存区,年龄+1,大于15的对象进入老年区;

  老年区:当进入老年区的对象大小大于老年去可用连续空间,进行重GC(全局GC)

  垃圾清理算法:复制算法(幸存区)、标记清除算法、标记压缩算法

jvm调优参数:-Xms1m :设置最堆初始为1m    -Xmx8m :设置最大堆内存为8m 

        -XX:+PrintGC 每次触发GC的时候打印相关日志

        -XX:+HeapDumpOnOutOfMemoryError: 在报OutOfMemoryError时堆dump 

        -Xss1m :设置栈大小为1m   

 

执行引擎:分配给运行时数据区的字节码将由执行引擎执行。执行引擎读取字节码并逐段执行。

 

posted on 2021-03-23 16:24  .11  阅读(53)  评论(0)    收藏  举报