JVM介绍
本专栏主要的内容是摘取自《深入理解Java虚拟机:JVM高级特性与最佳实践》。
我把书中的内容进行抽取并写成博客,更加容易阅读,是快速入门JVM的好博客,哈哈~
瓜牛呱呱
Hope is a good thing
展开
-
JVM运行时数据区域 —— 程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池
java虚拟机运行时数据区域的概括图如下所示: 下面将对运行时数据区进行讲解 程序计数器 1、说明:程序计数器可以看做是当前线程所执行的字节码的行号指示器。其实通俗点讲就是记录class文件运行到哪一行 2、注意的点: (1)因为CPU执行时只能处理一个线程的代码,但是可能有多个线程在执行,所以需要记录每个线程执行到哪里,所以每个线程都有一个独立的程序计数器。所以这类区域是 “线...原创 2018-04-16 17:47:33 · 503 阅读 · 0 评论 -
JVM 中判断对象是否 “存活” 的算法 —— 可达性分析算法
在堆中,几乎存放着所有的对象实例,那么回收这些对象实例时,我们需要判断哪些对象是 “已死” 可以回收的,哪些对象是 “存活” 不需要回收的,下面就来介绍一下 JVM 中如何判断上述问题的。 基本思路 通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用...原创 2018-04-17 10:28:22 · 476 阅读 · 0 评论 -
JVM垃圾回收集算法 —— 标记-清除算法、复制算法、标记-整理算法
标记-清除算法 1、执行过程:如同它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 2、该算法是回收算法中最基础的算法,其他的算法都是基于该算法进行改进的 3、缺点: (1)效率问题:标记和清除两个过程的效率都不高 (2)空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配...原创 2018-04-17 11:24:50 · 3589 阅读 · 1 评论 -
JVM垃圾收集器(一) —— 概念:新生代和老年代、并行和并发
在上篇文章中我们讲到了垃圾回收的几种算法。垃圾收集算法是内存回收的方法论,而垃圾收集器是垃圾回收的具体实现。 在了解垃圾收集器之前,本篇文章先来简单的说一下新生代和老年代、并行和并发的概念。 新生代和老年代 从内存回收的角度来看,一般我们可以将Java堆分为:新生代和老年代。 新生代再细分可以分为 Eden空间、From Survivor空间、To Survivor空间 1、...原创 2018-04-17 15:58:25 · 1487 阅读 · 0 评论 -
JVM垃圾收集器(二) —— 新生代垃圾收集器
在看本文之前,建议先去了解一下几个概念先再来看下文哈,大牛请忽略,哈哈~ 所有收集器概括图 下面先给大家看一下所有收集器及其关联的示意图,然后我们再对每个回收器进行讲解: ★★★ 注意:如果两个收集器之间存在连线,就说明它们可以搭配使用 Serial收集器 1、特点:一个单线程的收集器;且运行时必须暂停其他所有的工作线程,直到它收集结束 2、虚拟机运行在Client模式...原创 2018-04-17 16:02:10 · 647 阅读 · 0 评论 -
JVM垃圾收集器(三) —— 老年代垃圾收集器
上一篇文章讲了新生代的垃圾收集器,这篇文章我们来讲讲老年代的垃圾收集器 Serial Old收集器 1、说明:一个单线程收集器,使用“标记-整理”算法。其实就是Serial收集器老年代的版本 2、优缺点 和 运行图 和Serial收集器一样,所以这里就不多赘述了 Parallel Old收集器 1、说明:Parallel Old是Parallel Scavenge收集...原创 2018-04-17 17:34:24 · 1815 阅读 · 0 评论 -
JVM垃圾收集器(四) —— G1收集器
前面两篇文章主要是讲了新生代和老年代的垃圾收集器,本文就来介绍一下比较特殊的垃圾收集器——G1垃圾收集器 G1是一款面向服务端应用的垃圾收集器。 一、G1的特点: 1、并行与并发:G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短Stop-The-World停顿的时间,部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以...原创 2018-04-17 18:33:01 · 413 阅读 · 0 评论 -
JVM垃圾收集器(五) —— 默认的垃圾收集器
在前面的几篇文章讲述了各种垃圾收集器,但是问题来了,我们在Linux或者Windows安装的 jdk 默认是什么收集器呢? 打开控制台,在控制台中输入一下命令: java -XX:+PrintCommandLineFlags -version 32位的windows可以看到下面的输出: -XX:InitialHeapSize=16777216 -XX:MaxHeapSize=2...原创 2018-04-18 12:00:01 · 2363 阅读 · 4 评论