《深入理解Java虚拟机》笔记3
垃圾收集算法
(1)标记清除
根据根搜索确定对象是否已死,已死对象标记,然后一起清除。
这个其实不算什么算法,最正常想法应该就是这样。但是,缺点
是效率不高,如果有很多不连续的小对象需要回收,会花好多时间
。另外,造成内存碎片也是问题,分配新的对象和分配大对象不好解决。
(2)标记复制
简单的做法,把内存分成两块,内存永远在其中一块上分配。
垃圾回收时,把存活的对象复制到另一块连续分配,然后把前一块
内存全清除即可。这种方法是浪费一半内存,代价有点大。
PS:以后内存大小如果不是问题,不知道会不会用这种算法?
大多数情况下,对象的存活期应该是朝生夕灭,所以,专门留出
一半的空间来准备备份是没有必要的。
hotspot虚拟机的算法是内存分为一块大的eden空间和两块较小
的survivor空间(注意:只是新生代,不是全部内存,后面会说到新生代)
其中一块survivor用作备份存活对象,eden和survivor可以用来分配内存。
这样浪费的空间就只有一个survivor。
另外一个问题随之而来,并不能保证存活下的对象全能被一个survivor容纳。
不能容纳的对象必须有别的内存来担保,这个工作是由老生代担当的。
从名字也可以看出老生代存放的是存活周期比较老的对象。
(3)标记整理算法
佩服这个算法的创造者┏ (^ω^)=☞
老生代没有额外的担保空间,但是又需要垃圾回收,聪明的人想到了办法。
每次垃圾回收时,把存活的对象向内存的另一侧移动,然后清除回收前的起点到
另一侧占用的边界之间的内存。
(4)分代收集算法
把内存分为新生代和老生代。新生代用的是复制算法,
老生代用的是标记整理算法。作者把分代算法和前面三种算法
并列,感觉不是一个层次的东西。计算机书籍,理解即可。
《深入理解Java虚拟机》笔记3的更多相关文章
- 《Andrew Ng深度学习》笔记1
深度学习概论 1.什么是神经网络? 2.用神经网络来监督学习 3.为什么神经网络会火起来? 1.什么是神经网络? 深度学习指的是训练神经网络.通俗的话,就是通过对数据的分析与计算发现自变量与因变量的映 ...
- Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 2. 优化算法)
===========第2周 优化算法================ ===2.1 Mini-batch 梯度下降=== epoch: 完整地遍历了一遍整个训练集 ===2.2 理解Mini-bat ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 4. 深层神经网络)
=================第2周 神经网络基础=============== ===4.1 深层神经网络=== Although for any given problem it migh ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 1. 深度学习概论)
=================第1周 循环序列模型=============== ===1.1 欢迎来到深度学习工程师微专业=== 我希望可以培养成千上万的人使用人工智能,去解决真实世界的实际问 ...
- 《Andrew Ng深度学习》笔记4
浅层神经网络 1.激活函数 在神经网络中,激活函数有很多种,常用的有sigmoid()函数,tanh()函数,ReLu函数(修正单元函数),泄露ReLu(泄露修正单元函数).它们的图形如下: sigm ...
- 《Andrew Ng深度学习》笔记3
浅层神经网络 初步了解了神经网络是如何构成的,输入+隐藏层+输出层.一般从输入层计算为层0,在真正计算神经网络的层数时不算输入层.隐藏层实际就是一些算法封装成的黑盒子.在对神经网络训练的时候,就是对神 ...
- 《Andrew Ng深度学习》笔记2
神经网络基础 1.图计算 计算时有两种方法:正向传播和反向传播.正向传播是从底层到顶层的计算过程,逐步推出所求公式.反向传播是从顶层到底层,从已知的式子求出因变量的影响关系. 在这里用到的反向传播算法 ...
- 《Andrew Ng深度学习》笔记5
深层神经网络 深层神经网络的组成如图,这里主要是深层神经网络符号的定义. 为什么要用深层神经网络,有什么好处?这里主要是分层的思想.在软件工程中,如果问题遇到困难,一般是通过“加多”一层的方法来解决, ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 3. 浅层神经网络)
=================第3周 浅层神经网络=============== ===3..1 神经网络概览=== ===3.2 神经网络表示=== ===3.3 计算神经网络的输出== ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)
=================第2周 神经网络基础=============== ===2.1 二分分类=== ===2.2 logistic 回归=== It turns out, whe ...
随机推荐
- 常见协议基础知识总结--FTP协议
FTP协议是一种基于客户端和服务器的文件传输协议,属于应用层协议,基于传输层的TCP协议: FTP主要分成主动模式和被动模式两种传输方式, 方式是相对服务器而言的,服务器主动发起数据连接即主动方式,使 ...
- 《Java编程思想》笔记 第十三章 字符串
1.String对象不可变 String对象不可变,只读.任何指向它的引用都不能改变它的内容.改变String内容意味着创建了一个新的String对象. String 对象作为方法参数时都会复制一份引 ...
- MATLAB中的积分运算
MATLAB中计算一元函数的(不)定积分使用int函数. ①int(s)计算符号表达式s的不定积分 syms x;s = x^2;int(s) 计算x^2的不定积分. ②int(s,x)计算符号表达式 ...
- (四)监控cpu
定义规则:创建模板--->群组--->应用集--->监控项--->图形--->触发器--->添加主机(加入到群组,关联模板) 1)cpu空闲率,用户态使用率,内核态 ...
- Python练习——同时安装python2 与 python 3如何选择不同解释器运行脚本
如果同时安装了python 2 和python 3 那么我们需要在运行时指定解释器 如下: 其中py -2 ex1.py指定了解释器的版本,以及打开的文件 如果使用 py-3 ex1.py则使用了py ...
- 利用ipv6技术,废旧笔记本变成互联网server
如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到.那恭喜你,再配合我这个ddns,你可以完美地把你家的电脑当服务器使用. 1.确保你家的宽 ...
- java中的控制语句
控制语句 1.1 顺序结构 (最常见的) 特点:代码从上往下依次执行 1.2 选择结构 : if 判断语句 : switch 判断语句: Switch语句使用的注意事项: 1.每一个语句结束后需要有一 ...
- 前端设计师必须知道的10个重要的CSS技巧
对于一个初入门的前端设计师,在设计修改网站前端的时候,我们需要编写一些CSS.JS的内容达到界面效果.今天分享10个对于前端设计师来说重要的CSS技巧,这也是我在给许多客户做网站的过程当中总结出来的. ...
- Find the Difference -- LeetCode
Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...
- 【2-SAT】【并查集】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem
再来回顾一下2-SAT,把每个点拆点为是和非两个点,如果a能一定推出非b,则a->非b,其他情况同理. 然后跑强连通分量分解,保证a和非a不在同一个分量里面. 这题由于你建完图发现都是双向边,所 ...