• 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日志

  • 相关阅读:
    spring boot 2+activiti 6.0 手把手带你学习activiti
    js自定义验证码
    [C#] OpenXml导出Excel,设置单元格格式,自动设置列宽
    [WPF] 自定义分页控件,可通过样式模板修改外观
    [WPF] 默认滚动条,通过附加属性和样式实现自定义
    王道考研数据结构错题集
    django rest framework 反序列化过程剖析
    django rest framework响应数据的源码分析
    django rest framework序列化过程剖析
    java源码学习(二)Integer
  • 原文地址:https://www.cnblogs.com/ruerror/p/13669854.html
Copyright © 2020-2023  润新知