1.虚拟机
- 垃圾回收算法
- Serial 单线程进行GC,在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束;
- Parallel 相比Serial收集器,主要又是在于使用多线程完成垃圾清理工作,这样可以利用多核的特性,降低Gc时间
- CMS 以牺牲吞吐量为代价来获得最短回收停顿事件的垃圾回收期。实现GC线程和应用线程并发工作,不需要暂停所有应用线程
- G1 G设计初衷是为了尽量缩短处理超大堆(大于4g)时产生的停顿。相对于CMS的又是而言是内存碎片的产生率大大降低。
- jvm实例和jvm执行引擎实例
- jvm实例对应了一个独立运行的java程序,而jvm执行引擎实例对应了属于用户运行程序的线程;也就是说jvm实例是进程级别,而jvm执行引擎是线程级别的。
-
jvm的生命周期:
- 当启动一个java程序时,一个jvm实例就诞生了,main函数作为jvm实例运行的起点,任何其它线程均由该线程启动。
- jvm内部有两种线程:守护线程和非守护线程。守护线程通常由jvm自己使用(例如垃圾回收)。
- jvm实例的死亡:当程序中所有的非守护线程都终止时,jvm才退出。
-
jvm体系结构:
jvm体系结构分为三部分:类加载器、运行时数据区和执行引擎- 类加载器:
启动类装载器是jvm实现的一部分,只在系统类(java api)的安装路径找要装入的类; - 执行引擎:
作用:执行字节码,或者执行本地方法 - 运行时数据区:
主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈
(1)方法区和堆由所有线程共享
堆:存放所有程序在运行时创建的对象(数组和对象,通过new建立的实例都存放在堆内存中)
方法区:当JVM的类装载器加载.class文件,并进行解析,把解析的类型信息放入方法区。用于存储类结构信息,如常量池、域、方法数据、方法体、构造函数,包括类中的专用方法,实例初始化,接口初始化都存储在这个区域,是堆中的永久带 (静态成员、构造函数、常量池、线程池)
(2)Java栈和PC寄存器由线程独享,开启一个线程时就创建了一个栈(用于存储局部变量,当数据使用完,所占空间会自动释放)
(3)本地方法栈:存储本地方法调用的状态,window系统占用
- 类加载器: