xl_echo编辑整理。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!

---

> 以下内容摘抄自《_深入理解Java虚拟机_JVM高级特性与最佳实践 第2版_220_》,博主完全尊重书籍原创,只是学习笔记摘抄部分,由于不是原创,不支持转载。如有侵权请联系博主(微信号:t2421499075)。

> Java是一门面向对象的编程语言,在程序运行过程中每时每刻都有对象被创建,我们在写代码的时候,可以看到创建对象仅仅只是new关键字而已,而虚拟机中创建确实一个比较复杂的过程。

### 虚拟机内部创建对象流程图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190720112449373.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hsZWNobw==,size_16,color_FFFFFF,t_70)

#### GC回收对象
对象是否还“存活”
Java程序运行产生了很多对象实例,垃圾收集器在对堆进行回收前都会判断对象是否还“存活”

### 对象是否存活算法
- 引用计数算法
- 可达性分析算法

#### 引用计数算法
给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1,当引用失效时计数器值就减1.大部分的结果都是当计数器统计完成技术值为0,那么该对象就是已经可以被回收。(它不能解决循环引用的问题)

#### 可达性分析算法(GC采用的算法)
该算法的基本思路就是通过可达性分析来判定对象是否存活的。这个算法的基本思路就是通过一系列的成为“GC Roots”的对象作为起点,从这些节点开始向下搜索搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链项链时,证明对象是可以回收的

### 垃圾收集算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法

#### 标记-清除算法
最基础的收集算法是标记-清除算法,如同它的名字一样,算法为标记和清除两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。很多其他的算法都是基于标记清除这种算法的思想,所以说它是最基础的算法

#### 复制算法
为了解决效率问题,一种称为复制的收集算法出现了。它将内存分为两块对等大小,每次使用一块,当这一块使用完成,就将还存活的对象复制到另一块内存,一次性清除使用完成的那一块。它的优点就是实现简单,运行高效。

#### 标记-整理算法
复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会降低。标记过程与标记-清除算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

#### 分代收集算法
这种算法其实是将内存划分为不同的几块,一般是把Java堆分为新生代和老年代,根据不同的年代的特点选用上面的适合的算法。

深入理解Java虚拟机二 阅读笔记的更多相关文章

  1. 深入理解Java虚拟机一 阅读笔记

    xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...

  2. Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)

    Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...

  3. 《深入理解Java虚拟机》学习笔记

    <深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...

  4. Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)

    Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...

  5. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  6. 《深入理解 Java 虚拟机》学习笔记 -- 内存区域

    <深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有 ...

  7. 《深入理解java虚拟机》学习笔记之编译优化技术

    郑重声明:本片博客是学习<深入理解Java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序员有一个共识,以编译方式执行本地代码比解释方式更快,之所以有这样的共识,除去虚拟机解释 ...

  8. 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解

    郑重声明:本片博客是学习<深入理解java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块 ...

  9. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

随机推荐

  1. SQLite Expert Professional 打开加密SQLite数据库

    原文 SQLite Expert Professional 打开加密数据库 (已修改) 版本:sqlite expert professional 4.2.0.739 (x86) 目的:用SQLite ...

  2. Android零基础入门第9节:Android应用实战,不懂代码也可以开发

    原文:Android零基础入门第9节:Android应用实战,不懂代码也可以开发 通过上一期的学习,我们成功开发了Android学习的第一个应用程序,不仅可以在Android模拟器上运行,同时还能在我 ...

  3. wlan和wifi的区别是什么?

    首先我们简单介绍下WLAN无线上网,其全称是:Wireless Local Area Networks,中文解释为:无线局域网络,是一种利用射频(Radio Frequency RF)技术进行据传输的 ...

  4. 修改Android Studio默认的API Level(SDK版本)

    原文:修改Android Studio默认的API Level(SDK版本) Android Studio(2.1.2)新建工程的时候只会让你选择最低支持的SDK版本,默认的目标编译SDK版本会以系统 ...

  5. Windows界面编程第五篇 静态控件背景透明化(13篇)

    上一篇<Windows界面编程第三篇 异形窗体 普通版>和<Windows界面编程第四篇异形窗体 高富帅版>介绍了异形窗口(异形窗体)的创建,并总结出了异形窗口的“三要素”: ...

  6. JS解析Json 数据并跳转到一个新页面,取消A 标签跳转

    JS解析Json 数据并跳转到一个新页面,代码如下 $.getJSON("http://api.cn.abb.com/common/api/staff/employee/" + o ...

  7. 简析TCP的三次握手与四次分手(TCP协议头部的格式,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端)good

    2014-10-30 分类:理论基础 / 网络开发 阅读(4127) 评论(29)  TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更 ...

  8. 理解typedef(转)

    // 从别人那转的,调整下格式便于阅读. 首先请看看下面这两句: typedef ]; typedef void (*p)(void); 如果你能一眼就看出它们的意思,那请不要再往下看了.如果你不太理 ...

  9. 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)

    就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https:// ...

  10. jsp中的指令与动作

    JSP中的三种命令指令分别是page.include.taglib JSP中的动作元素包括:include.forward.useBean.getProperty.setProperty.plugin ...