垃圾收集算法

(1)标记清除

根据根搜索确定对象是否已死,已死对象标记,然后一起清除。

这个其实不算什么算法,最正常想法应该就是这样。但是,缺点

是效率不高,如果有很多不连续的小对象需要回收,会花好多时间

。另外,造成内存碎片也是问题,分配新的对象和分配大对象不好解决。

(2)标记复制

简单的做法,把内存分成两块,内存永远在其中一块上分配。

垃圾回收时,把存活的对象复制到另一块连续分配,然后把前一块

内存全清除即可。这种方法是浪费一半内存,代价有点大。

PS:以后内存大小如果不是问题,不知道会不会用这种算法?

大多数情况下,对象的存活期应该是朝生夕灭,所以,专门留出

一半的空间来准备备份是没有必要的。

hotspot虚拟机的算法是内存分为一块大的eden空间和两块较小

的survivor空间(注意:只是新生代,不是全部内存,后面会说到新生代)

其中一块survivor用作备份存活对象,eden和survivor可以用来分配内存。

这样浪费的空间就只有一个survivor。

另外一个问题随之而来,并不能保证存活下的对象全能被一个survivor容纳。

不能容纳的对象必须有别的内存来担保,这个工作是由老生代担当的。

从名字也可以看出老生代存放的是存活周期比较老的对象。

(3)标记整理算法

佩服这个算法的创造者┏ (^ω^)=☞

老生代没有额外的担保空间,但是又需要垃圾回收,聪明的人想到了办法。

每次垃圾回收时,把存活的对象向内存的另一侧移动,然后清除回收前的起点到

另一侧占用的边界之间的内存。

(4)分代收集算法

把内存分为新生代和老生代。新生代用的是复制算法,

老生代用的是标记整理算法。作者把分代算法和前面三种算法

并列,感觉不是一个层次的东西。计算机书籍,理解即可。

《深入理解Java虚拟机》笔记3的更多相关文章

  1. 《Andrew Ng深度学习》笔记1

    深度学习概论 1.什么是神经网络? 2.用神经网络来监督学习 3.为什么神经网络会火起来? 1.什么是神经网络? 深度学习指的是训练神经网络.通俗的话,就是通过对数据的分析与计算发现自变量与因变量的映 ...

  2. Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 2. 优化算法)

    ===========第2周 优化算法================ ===2.1 Mini-batch 梯度下降=== epoch: 完整地遍历了一遍整个训练集 ===2.2 理解Mini-bat ...

  3. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 4. 深层神经网络)

     =================第2周 神经网络基础=============== ===4.1  深层神经网络=== Although for any given problem it migh ...

  4. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 1. 深度学习概论)

     =================第1周 循环序列模型=============== ===1.1 欢迎来到深度学习工程师微专业=== 我希望可以培养成千上万的人使用人工智能,去解决真实世界的实际问 ...

  5. 《Andrew Ng深度学习》笔记4

    浅层神经网络 1.激活函数 在神经网络中,激活函数有很多种,常用的有sigmoid()函数,tanh()函数,ReLu函数(修正单元函数),泄露ReLu(泄露修正单元函数).它们的图形如下: sigm ...

  6. 《Andrew Ng深度学习》笔记3

    浅层神经网络 初步了解了神经网络是如何构成的,输入+隐藏层+输出层.一般从输入层计算为层0,在真正计算神经网络的层数时不算输入层.隐藏层实际就是一些算法封装成的黑盒子.在对神经网络训练的时候,就是对神 ...

  7. 《Andrew Ng深度学习》笔记2

    神经网络基础 1.图计算 计算时有两种方法:正向传播和反向传播.正向传播是从底层到顶层的计算过程,逐步推出所求公式.反向传播是从顶层到底层,从已知的式子求出因变量的影响关系. 在这里用到的反向传播算法 ...

  8. 《Andrew Ng深度学习》笔记5

    深层神经网络 深层神经网络的组成如图,这里主要是深层神经网络符号的定义. 为什么要用深层神经网络,有什么好处?这里主要是分层的思想.在软件工程中,如果问题遇到困难,一般是通过“加多”一层的方法来解决, ...

  9. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 3. 浅层神经网络)

     =================第3周 浅层神经网络=============== ===3..1  神经网络概览=== ===3.2  神经网络表示=== ===3.3  计算神经网络的输出== ...

  10. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)

     =================第2周 神经网络基础=============== ===2.1  二分分类=== ===2.2  logistic 回归=== It turns out, whe ...

随机推荐

  1. c 語言 控制碼

    source code #include <stdio.h> int main() { char *test = "ABC\x41\n"; printf("s ...

  2. jquery 的combobox 处理级联

    随笔---jquery 的combobox 处理级联 ------------------------html------------- <select id="groupId&quo ...

  3. runtimeService.startProcessInstanceById("process:6:55036", 2222, variables) SQL语句

    JAVA: variables:{ user_flow_start_dept : "3333"} runtimeService.startProcessInstanceById(& ...

  4. Python 进阶 之 enumerate()函数

    enumerate()是Python的内置函数,无需依赖包,enumerate()作用是可以将生成器包装成生成器,类似于range,但enumerate()可以自动生成索引. enumerate(pa ...

  5. HDU 1014 Uniform Generator(最大公约数,周期循环)

    #include<iostream> #include <cstdio> #include <cstring> using namespace std; int m ...

  6. noi题库 1.7 字符串

    前九题 01:统计数字字符个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字 ...

  7. Jenkins一个任务下载多个git库代码

    公司的项目是微服务架构,一个服务对应的一个git仓库,现在的需求时拉取所有仓库代码下来,指定父级的pom.xml,一次性构建打包 jenkins在默认情况下,一个任务只能配置一个git仓库地址 1.安 ...

  8. 传统路径导出 VS 直接路径导出(oracle exp direct=y)

    Oracle 传统的Export与Import依旧被保留到11g,而且9i与10g有很多依旧使用Export与Import方式进行备份与恢复的企业.从Oracle 7.3开始,传统的exp导出程序提供 ...

  9. 【推导】【贪心】Codeforces Round #402 (Div. 2) E. Bitwise Formula

    按位考虑,每个变量最终的赋值要么是必为0,要么必为1,要么和所选定的数相同,记为2,要么和所选定的数相反,记为3,一共就这四种情况. 可以预处理出来一个真值表,然后从前往后推导出每个变量的赋值. 然后 ...

  10. 【递推】【卡特兰数】CODEVS 3134 Circle

    新GET了一种卡特兰数的应用…… 在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次.在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法. 不会证 ...