zoukankan      html  css  js  c++  java
  • 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日志

  • 相关阅读:
    如何将本地代码上传到GitHub
    《剑指offer》JavaScript版19-21题
    《剑指offer》JavaScript版16-18题
    《剑指offer》JavaScript版13-15题
    蘑菇街(前端1面)
    《二十二》观后感
    前端面试题(2)
    《深入理解ES6》之Promise
    HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)
    HDU 4940 Destroy Transportation system(2014 Multi-University Training Contest 7)
  • 原文地址:https://www.cnblogs.com/ruerror/p/13669854.html
Copyright © 2011-2022 走看看