java jvm核心

jvm

  内存管理

    方法区(线程共享) 

      存放常量、元数据信息、class文件信息

    堆(线程共享)

      java中内存最大的一块区域,

      存放对象实例,对象实例主要分对象头、实例数据,对象头包括自身运行时的数据(锁状态标记,gc分代年龄,hash码)与元数据指针,实例数据包括自定义字段、父类继承的字段

    虚拟机栈(独有)

      存放局部变量表、方法出口等,局部变量表包含基本数据类型(byte、short、int、long、double、float、char、boolean)与对象引用指针

    本地方法栈(独有)

      等同虚拟机栈

    程序计数器(独有)

      当前线程所执行的字节码的行号指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成

  垃圾收集

      收集垃圾的时机,由jvm自动控制

      判断对象已死:可达性分析(从一系列GC ROOT的集合往下搜索引用链,若不存在既对象已不再使用)、引用计数器

      分代收集理论:根据不同代的对象存活时间,采用不同的垃圾收集算法,年轻代-标记复制算法,老年代-标记整理算法

             标记-清除算法(执行大量标记与清除的动作,效率低)、

             标记-复制算法(使用Eden和其中一块Survivor区,根据朝升夕灭,将存活的对象移动到另一块Survivor区)、

             标记-整理算法(标记所有不可用对象,所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存)

      垃圾收集器:serial收集器-单线程,收集垃圾时停止其它线程,暂停服务;parNew收集器-多线程的serial收集器;cms收集器-以最短暂停时间为目标的收集器

  类加载机制

    加载-连接(验证、准备、解析)-初始化-使用-卸载

      加载需要类加载器与类确定唯一类

    类加载器

      bootstrap加载器-jvm自带加载jdk下包,扩展类加载器-加载jre下包,系统类加载器-自定义可以继承实现的类加载器

    父类双亲委派模型

      加载类的时候,先交给父类加载,父类存在则返回,反之,交给子类;

      优点:保证了核心包的唯一性,不被篡改

  内存模型

      jvm虚拟了主存与工作内存,各线程共享主存,从主存读取变量,拷贝到工作内存,进行修改,这也是导致线程不安全的原因

  jvm常见参数

    -Xmx 最大堆大小 –Xms 最小堆大小 -XX:+PrintGCDetails 打印gc日志

原文地址:https://www.cnblogs.com/ruerror/p/13669854.html