《深入理解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 ...
随机推荐
- shell命令行混合进制计算器smartbc
需要简单的计算的时候,不想用GUI的计算器,能在shell下直接计算就最好了 查了下,有个东西叫 bc, 具体的使用就不赘述了,可以运行bc,然后进去计算,也可以echo传递过去,大概是像这样 ec ...
- IC卡的传输协议(3)【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172027.HTM 3.终端传输层 本节描述了在终端和 IC 卡之间传输的命令和响应 APDU 的机制 ...
- decimal数据类型
DECIMAL(N,M)中M是小数部分的位数,若插入的值未指定小数部分或者小数部分不足M位则会自动补到M位小数,若插入的值小数部分超过了M为则会发生截断,截取前M位小数. N是整数部分加小数部分的总长 ...
- Oracle rman 脚本
1.shell脚本1)vi rman_backup.cmd#rman_backup.cmdconnect target /run{ allocate channel d1 device type d ...
- Pycharm上python和unittest两种姿势傻傻分不清楚【转载】
前言 经常有人在群里反馈,明明代码一样的啊,为什么别人的能出报告,我的出不了报告:为什么别人运行结果跟我的不一样啊... 这种问题先检查代码,确定是一样的,那就是运行姿势不对了,一旦导入unittes ...
- 深入解析当下大热的前后端分离组件django-rest_framework系列一
前言 Nodejs的逐渐成熟和日趋稳定,使得越来越多的公司开始尝试使用Nodejs来练一下手,尝一尝鲜.在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线.将浏览器中为用户进行页面展 ...
- 利用beamer做幻灯片插入EPS图片的方法
可以利用epstopdf宏包,在命令行下利用pdflatex带"-shell-escape"参数编译. 先插入epstopdf宏包:\usepackage{graphicx}\ ...
- Redis的cluster集群
目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redis server上,达到横向扩展的目的. 对于一致性哈稀分片的算法,Jedis-2.0.0已经提供 ...
- Go语言,用原子函数atomic避免资源竞争
下一步应该是互斥锁了. package main import ( "fmt" "runtime" "sync" "sync/at ...
- Django 在 view 中使用 Paginator分页插件
1.在 view 中使用 Paginator def query(request,sql): # 创建连接 connection = pymysql.connect(**config) try: wi ...