JVM 笔记

基本组成

这里写图片描述

  1. 执行引擎:执行虚拟机字节码。
  2. 类加载器:把class文件加载到方法区中。
  3. 垃圾回收:用于回收没被引用的对象。
  4. 堆:存放对象实例,主要的内存工作区
  5. 方法区:存放类信息、常量
  6. 栈:主要存放变量,参数返回值。
  7. 直接内存:NIO直接跳过堆直接操作内存,效率比堆操作快。
  8. PC寄存器:存放执行环境的指针,计数器等信息

重点组件

1. 存:实例对象

2. 结构:新生代 老年代

新生代(eden s0 s1) 老年代 (tenured)
代数划分机制:经过GC的次数,这个GC的阈值可以通过参数配置。(默认为15次),建议新:老 配比1:3或1:2

1. 存:变量和引用。一个线程的私有内存空间

2. 结构

局部变量表 (局部变量,报错函数)
操作数栈(计算的中间结果)
异常数据

方法区

1. 存:类的定义,常量

注:当方法区定义过小,或者加载的类信息过大时,会出现OOM异常

垃圾回收

1. 作用:回收不被引用的对象

2. 算法:

①引用计数算法:被引用1次,对象计数器加1。缺点:性能差,无法处理循环引用。
②标记清除算法:标记与清除操作。缺点:会产生内存碎片。
③复制算法:首先分配两块区域,回收时,先把有引用的复制新的区域,然后清除旧的没被引用的区域。
④标记压缩算法:把标记有引用的对象压缩至内存的一端,然后在进行清理。
⑤分代算法:如堆中分为新生代和老年代。
⑥分区算法:划分多个区,细化可以粒度,回收时只对部分区域进行回收,进而不会影响其他区域。

3.垃圾回收器的种类:

①串行GC:单线程不关心并发。(新生,老年)
②并行GC:多线程,关心吞吐量。(新生)复制算法
③CMSGC:并发标记清除,关注停顿时间。推荐使用ParallelGC与ParallelOldGC
④G1GC:分区算法 详情

附属资料

JVM参数配置大全

Java中的各种数据类型在内存中存储的方式

对象的创建过程
栈->TLAB->老年代->新生代

posted @ 2017-04-19 21:24  keivnyau  阅读(123)  评论(0编辑  收藏  举报