1.虚拟机

来源:互联网 发布:淘宝不支持该地区销售 编辑:程序博客网 时间:2024/06/05 11:51
  1. 垃圾回收算法
    • Serial 单线程进行GC,在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束;
    • Parallel 相比Serial收集器,主要又是在于使用多线程完成垃圾清理工作,这样可以利用多核的特性,降低Gc时间
    • CMS 以牺牲吞吐量为代价来获得最短回收停顿事件的垃圾回收期。实现GC线程和应用线程并发工作,不需要暂停所有应用线程
    • G1 G设计初衷是为了尽量缩短处理超大堆(大于4g)时产生的停顿。相对于CMS的又是而言是内存碎片的产生率大大降低。
  2. jvm实例和jvm执行引擎实例
    • jvm实例对应了一个独立运行的java程序,而jvm执行引擎实例对应了属于用户运行程序的线程;也就是说jvm实例是进程级别,而jvm执行引擎是线程级别的。
  3. jvm的生命周期:

    • 当启动一个java程序时,一个jvm实例就诞生了,main函数作为jvm实例运行的起点,任何其它线程均由该线程启动。
    • jvm内部有两种线程:守护线程和非守护线程。守护线程通常由jvm自己使用(例如垃圾回收)。
    • jvm实例的死亡:当程序中所有的非守护线程都终止时,jvm才退出。
  4. jvm体系结构:
    这里写图片描述
    jvm体系结构分为三部分:类加载器、运行时数据区和执行引擎

    • 类加载器:
      启动类装载器是jvm实现的一部分,只在系统类(java api)的安装路径找要装入的类;
    • 执行引擎:
      作用:执行字节码,或者执行本地方法
    • 运行时数据区:
      主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈
      (1)方法区和堆由所有线程共享
      堆:存放所有程序在运行时创建的对象(数组和对象,通过new建立的实例都存放在堆内存中)
      方法区:当JVM的类装载器加载.class文件,并进行解析,把解析的类型信息放入方法区。用于存储类结构信息,如常量池、域、方法数据、方法体、构造函数,包括类中的专用方法,实例初始化,接口初始化都存储在这个区域,是堆中的永久带 (静态成员、构造函数、常量池、线程池)
      (2)Java栈和PC寄存器由线程独享,开启一个线程时就创建了一个栈(用于存储局部变量,当数据使用完,所占空间会自动释放)
      (3)本地方法栈:存储本地方法调用的状态,window系统占用