文档章节

GC算法总结

小石头哥
 小石头哥
发布于 2017/04/08 23:07
字数 515
阅读 8
收藏 0

引用计数法:引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。

引用计数法的问题:1.引用和去引用伴随加法和减法,影响性能。2.很难处理循环引用

标记-清除:标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。

标记压缩:标记-压缩算法适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。

复制算法:

1.与标记-清除算法相比,复制算法是一种相对高效的回收方法

2.不适用于存活对象较多的场合 如老年代

3.将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收

 

© 著作权归作者所有

共有 人打赏支持
小石头哥

小石头哥

粉丝 8
博文 18
码字总数 14404
作品 0
广州
后端工程师
成为Java GC专家系列

成为Java GC专家(1):深入浅出Java垃圾回收机制 成为Java GC专家(2):如何监控Java垃圾回收机制 成为Java GC专家(3):如何优化Java垃圾回收机制 成为Java GC专家(4):Apache的MaxClients参数...

HenrySun
2016/06/21
66
0
使用CMS垃圾收集器产生的问题和解决方案

关于CMS垃圾收集器,在JVM GC参数以及GC算法的应用中已经提到了。 CMS并行GC是大多数应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题: promotion fa...

Hosee
2016/05/12
763
1
Java虚拟机详解----JVM常见问题总结

声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类。那篇文章和本文是面试时的重点。 面试必问关键词:JVM垃圾回收、...

商者
2016/04/10
6
0
深入理解Java虚拟机:JVM高级特性与最佳实践(三):内存分配与回收策略

java技术体系中所提倡的内存管理最终可以归为自动化的解决了两个问题:给对象分配内存已经回收分配给对象的内存。 对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配,当eden 区没...

熊大熊二
2015/11/08
0
0
笔试面试——java基础知识

1. JVM架构 2. gc 算法问题 3. JVM 安全 4. JVM 平台无关 5. JIT 6. 流总结 7.NIO 8. 不对成加密算法 9. 多线程 参考资料: 1 深入理解JVM 原文链接:http://blog.csdn.net/ostrichmyself/ar...

晨曦之光
2012/03/09
109
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
20分钟前
7
0
springboot logback日志配置

springboot 如果不使用外部tomcat的话,日志是需要自己配置的,不然的话就只有控制台的日志,但是日志又是我们在项目上了生产环境,出问题时,检查问题的唯一途径,所以我们要配置详细的日志...

曾大大胖
20分钟前
2
0
Linux服务器集体篡改时间的方法

Red Hat 虚拟化课程RH318,中小型公司使用的话,感觉可以匹敌OpenStack。手头上有一个VMware的映像,RHEV 3.5版的,只能把系统时间调整到2016年才能使用。Red Hat的RHEV已经更新到4.1版,不过...

大别阿郎
21分钟前
1
0
Tomcat启动异常:java.lang.ClassNotFoundException

警告: Name = mysqlDataSource Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "100" for "maxActive" property, wh......

hengbao5
22分钟前
1
0
GO错误的一些处理(defer,recover,panic)

package main import("fmt""errors")func main() {num := 10fmt.Printf("num的类型%T, num的值%v, num的地址%v\n", num, num, &num)num2 := new(int) //返回一个指针//num...

汤汤圆圆
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部