java虚拟机知识

java运行时数据区域

  • 程序计数器
    程序计数器是一块比较小的内存空间,它可以看成当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码命令

  • java虚拟机栈
    与程序计数器一样,java虚拟机栈(java Vritual machine Stacks)也是线程私有的,它的生命周期与线程相同。
    虚拟机栈描述的是java方法执行的内存模型,每个方法执行的同时都会创建一个栈帧(stack frame)可用于存储局部变量表,操作数栈,动态链接,方法出口等信息,每一个方法从被调用到完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

  • 本地方法栈
    本地方法栈(Native Method Stack )与虚拟机栈发挥的作用非常相似,他们之间区别是虚拟机栈为虚拟机执行的java方法工作,而本地方法栈为虚拟机使用到的Native方法工作

  • java堆
    java堆(java Heap)是java虚拟机所管理的内存中的最大的一块。此区域的唯一目的就是存放对象实例,几乎所有的对象实例都是在这里分配内存

  • 方法区
    方法区(Method Area) 与java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据

  • 运行时常量池
    运行时常量池(Runtime Constant Pool)是方法区的一部分,class文件除了有类的版本,字段,方法,接口等描述信息之外,还有一项信息是常量池(constant pool table),用于存放编译期生成的各种字面量和符号引用,这部分将在类加载后进入方法区的运行时常量区存放

如何判断对象死亡

  • 引用计数器算法
  • 可达性分析算法(java虚拟机使用的方法)
    可达性分析算法通过一系列的称为“GC root”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain)
    可以作为GC root的对象包括
    1.虚拟机栈中引用的对象
    2.方法区中类静态属性引用的对象
    3.方法区域中常量引用的对象
    本地方法栈中JNI引用的对象

垃圾收集算法

1.标记清除法

2.复制算法

3.标记-整理算法

垃圾收集器

1.seiral收集器 新生代中使用 复制算法

2.serial old 收集器 老年代中使用 整理算法

3.ParNew收集器 新生代中使用 serial收集器的多线程版本

4 parallel Scavenge收集器 复制算法 达到一个可控制的吞吐量

5 parallel old parallel scavenge的老年代

6 CMS收集器 (Concurrent Mark Sweep)以获取回收停顿时间为目标的收集器 标记-清除算法

执行流程:初始标志 -》 并发标志 -》重新标志 -》并发清除

7.G1收集器

特点:并行与并发,分代收集,空间整合(整理算法) 可预测的停顿

你可能感兴趣的:(java虚拟机知识)