深入理解Java虚拟机二 阅读笔记
xl_echo编辑整理。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!
---
> 以下内容摘抄自《_深入理解Java虚拟机_JVM高级特性与最佳实践 第2版_220_》,博主完全尊重书籍原创,只是学习笔记摘抄部分,由于不是原创,不支持转载。如有侵权请联系博主(微信号:t2421499075)。
> Java是一门面向对象的编程语言,在程序运行过程中每时每刻都有对象被创建,我们在写代码的时候,可以看到创建对象仅仅只是new关键字而已,而虚拟机中创建确实一个比较复杂的过程。
### 虚拟机内部创建对象流程图

#### GC回收对象
对象是否还“存活”
Java程序运行产生了很多对象实例,垃圾收集器在对堆进行回收前都会判断对象是否还“存活”
### 对象是否存活算法
- 引用计数算法
- 可达性分析算法
#### 引用计数算法
给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1,当引用失效时计数器值就减1.大部分的结果都是当计数器统计完成技术值为0,那么该对象就是已经可以被回收。(它不能解决循环引用的问题)
#### 可达性分析算法(GC采用的算法)
该算法的基本思路就是通过可达性分析来判定对象是否存活的。这个算法的基本思路就是通过一系列的成为“GC Roots”的对象作为起点,从这些节点开始向下搜索搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链项链时,证明对象是可以回收的
### 垃圾收集算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
#### 标记-清除算法
最基础的收集算法是标记-清除算法,如同它的名字一样,算法为标记和清除两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。很多其他的算法都是基于标记清除这种算法的思想,所以说它是最基础的算法
#### 复制算法
为了解决效率问题,一种称为复制的收集算法出现了。它将内存分为两块对等大小,每次使用一块,当这一块使用完成,就将还存活的对象复制到另一块内存,一次性清除使用完成的那一块。它的优点就是实现简单,运行高效。
#### 标记-整理算法
复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会降低。标记过程与标记-清除算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
#### 分代收集算法
这种算法其实是将内存划分为不同的几块,一般是把Java堆分为新生代和老年代,根据不同的年代的特点选用上面的适合的算法。
深入理解Java虚拟机二 阅读笔记的更多相关文章
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...
- 《深入理解Java虚拟机》学习笔记
<深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...
- Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)
Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...
- 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...
- 《深入理解 Java 虚拟机》学习笔记 -- 内存区域
<深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有 ...
- 《深入理解java虚拟机》学习笔记之编译优化技术
郑重声明:本片博客是学习<深入理解Java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序员有一个共识,以编译方式执行本地代码比解释方式更快,之所以有这样的共识,除去虚拟机解释 ...
- 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解
郑重声明:本片博客是学习<深入理解java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块 ...
- 《深入理解 java虚拟机》学习笔记
java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.
随机推荐
- fatal error LNK1169:找到一个或多个重定义的符号
这个算是个比较基础的问题,由于我不是C程序员,本行java,临时拉来做的,所以有些坑还得自己走出来. 这个问题是由于,全局变量在a.h中定义,在两个源文件a.cpp和b.cpp中引用,之后被编译器认为 ...
- SQLDirect 6.5 Source (Delphi 5-10.1 Berlin)
Description:SQLDirect Component Library is a light-weight Borland Database Engine replacement for Bo ...
- MySQL操作详解
创建并使用数据库 查看服务器上的数据库:SHOW DATABASES; 创建数据库:CREATE DATABASE <数据库名>; 指明使用何数据库:USE <数据库名> 创建 ...
- Q_DECLARE_METATYPE(继承QObject的类都已经自动注册),注册后的类型可以作为QVariant的自定义类型
简介 这个宏用来注册一个类(含默认构造.默认析构.拷贝构造函数)为QMetaType类型 ,注册后的类型可以作为QVariant的自定义类型. 这个宏应该放在类或者结构体外面的下面,也可以放在一个非公 ...
- ThoughtWorks 面试备忘录
ThoughtWorks 面试备忘录 前言 前段时间 ThoughtWorks 在网上和拉勾网合作搞了一次网络招聘,名为抛弃简历!让代码说话!,可谓赚足了眼球,很多程序猿纷纷摩拳擦掌.踊跃提交代码,在 ...
- 阻止屏保运行、显示器和系统待机(使用SystemParametersInfo和SetThreadExecutionState两种办法)
最近看了下电脑管家里面修复漏洞时阻止系统进入待机模式的实现,其实很简单,哈哈.可以看一下这个MSDN上对这个API的说明:http://msdn.microsoft.com/en-us/library ...
- Java基础(三) String深度解析
String可以说是Java中使用最多最频繁.最特殊的类,因为同时也是字面常量,而字面常量包括基本类型.String类型.空类型. 一. String的使用 1. String的不可变性 /** * ...
- play框架之简介
Play Framework是一个开源的Web框架,背后商业公司是Typesafe.要介绍Play之前,首先理清Play的两个不同的分支. Play 1.x 使用Java开发,最新版本是1.3.1,只 ...
- 精通并发与 Netty (一)如何使用
精通并发与 Netty Netty 是一个异步的,事件驱动的网络通信框架,用于高性能的基于协议的客户端和服务端的开发. 异步指的是会立即返回,并不知道到底发送过去没有,成功没有,一般都会使用监听器来监 ...
- 【需要重新整理】【mongoDB】mongoDB初见笔记
A安装(windows版): 1.官网下载安装文件 2.解压 3.配置环境变量 4.win+r cmd>打开控制台配置仓库路径 5.mongod --dbpath=d:/bigMongo//启动 ...