共计 1181 个字符,预计需要花费 3 分钟才能阅读完成。
一、基本概念:
JVM 是可运行 Java 代码的假想计算机,包含一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆和一个存储办法域。JVM 是运行在操作系统之上的,它与硬件没有间接
的交互。
二、架构:
JVM 分为五大模块:类装载器子系统、运行时数据区、执行引擎、本地办法接口 和 垃圾收集模块。
三、内存区域:
1、线程公有:
(1)栈:形容 java 办法执行的内存模型,每个办法在执行的同时都会创立一个栈帧(Stack Frame)、用于存储局部变量表、操作数栈、动静链接、办法进口等信息。(2)本地办法栈
(3)程序计数器
以后线程所执行的字节码的行号指示器
这个内存区域是惟一一个在虚拟机中没有规定任何 OutOfMemoryError 状况的区域。
2、线程私有:
(4)堆: 从 GC 的角度还能够细分为: 新生代 (Eden 区、From Survivor 区和 To Survivor 区) 和老年代。(5)办法区(也叫永恒代,java8 后改为元空间):
用于存储被 JVM 加载的类信息、常量、动态变量、即时编译器编译后的代码等数据
3、间接内存。
四、Minor GC(或 Young GC)、Major GC、Full GC
咱们须要尽量的防止垃圾回收,因为在垃圾回收的过程中,容易呈现 STW(Stop the World)的问题。JVM 在进行 GC 时,并非每次都对下面三个内存 (新生代、老年代、办法区) 区域一起回收的,大部分时候回收的都是指新生代。新生代收集(Minor GC/Young GC):只是新生代 (Eden、S0/S1) 的垃圾收集
老年代收集(Major GC/Old GC):只是老年代的垃圾收集。目前,只有 CMS GC 会有独自收集老年代的行为。也就是说其它 GC 执行 Major GC 的时候可不会只收集老年代的垃圾。留神,很多时候 Major GC 会和 Full GC 混同应用,须要具体分辨是老年代回收还是整堆回收。混合收集(Mixed GC):收集整个新生代以及局部老年代的垃圾收集。目前,只有 G1 GC 会有这种行为。整堆收集(Full GC):收集整个 java 堆和办法区的垃圾收集。补充阐明
触发 Minor GC 执行的状况有哪些?
当年老代空间有余时,就会触发 Minor GC,这里的年老代满指的是 Eden 区满,Survivor 区满不会触发 GC。会有 STW
呈现了 MajorGc,常常会随同至多一次的 Minor GC
也就是在老年代空间有余时,会先尝试触发 Minor GC,如果之后空间还有余,则触发 Major GC
触发 Full GC 执行的状况有哪些?
调用 System.gc( )时,零碎倡议执行 Full GC,然而不必然执行
老年代空间有余
办法区空间有余
通过 Minor GC 后进入老年代的均匀大小 大于 老年代的可用内存。如果容许担保并担保胜利临时不触发,到老年代空间有余再触发。不容许担保则间接触发。阐明:Full GC 是开发或调优中尽量要防止的。这样 STW 工夫会短一些
正文完