`
shuchaoo
  • 浏览: 40624 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java垃圾回收机制小结

阅读更多

最近找工作,被问了2次java垃圾回收机制,答的都不是很好!原先那股刨根问地的劲好像随着年龄的增长也越来越不行了!

 

以下是thinking in java中关于垃圾回收的一些总结:
java垃圾回收,主要是靠一个低优先级的进程负责回收,注意,不是后台的进程
他的优点是边回收,边调整堆使其紧凑


主要有以下几种算法:

1.引用计数
该算法在java虚拟机没被使用过,主要是循环引用问题,因为计数并不记录谁指向他,无法发现这些交互自引用对象。
怎么计数?
当引用连接到对象时,对象计数加1
当引用离开作用域或被置为null时减1
怎么回收?
遍历对象列表,计数为0就释放
有什么问题?
循环引用问题。

 

2.标记算法

标记算法的思想是从堆栈和静态存储区的对象开始,遍历所有引用,标记活得对象

对于标记后有两种处理方式

(1)停止-复制

所谓停止,就是停止在运行的程序,进行垃圾回收

所谓复制,就是将活得对象复制到另外一个堆上,以使内存更紧凑

优点在于,当大块内存释放时,有利于整个内存的重分配

有什么问题?

一、停止,干扰程序的正常运行,二,复制,明显耗费大量时间,三,如果程序比较稳定,垃圾比较少,那么每次重新复制量是非常大的,非常不合算

什么时候启动停止-复制?

内存数量较低时,具体多低我也不知道

(2)清除

也称标记-清除算法

也就是将标记为非活得对象释放,也必须暂停程序运行

优点就是在程序比较稳定,垃圾比较少的时候,速度比较快

有什么问题?

很显然停止程序运行是一个问题,只清除也会造成很对内存碎片。

为什么这2个算法都要暂停程序运行?

这是因为,如果不暂停,刚才的标记会被运行的程序弄乱,

(3)分代收集

分代收集是利用程序有大量临时对象的特点,对象每被引用一次,代数就增加,代数小的小型对象会被回收整理,大对象只会代数增加,不会被整理。

优点在于对于处理大量临时的变量很有帮助

(4)自适应

jvm会监测垃圾回收的效率,在(1),(2)算法之间切换。

 

3.增量收集,

增量回收的主要算法还是分代(Young Objects 回收)与Train算法(Mature Object回收),所谓增量回收的关键问题是如何实现有序的增量回收而不会导致混乱(引用及其的增加与减少),分代可以逐代回收,Train算法可以逐个车厢回收,这样每次一代或每次一厢可以实现短停顿回收。

具体算法可以参见以下文章:

Java HotSpot性能引擎的体系结构

http://blog.csdn.net/youlin/archive/2004/06/30/30574.aspx

 Java theory and practice: Garbage collection in the HotSpot JVM

http://www.ibm.com/developerworks/java/library/j-jtp11253/

Incremental collection of mature objects (1992)

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.3883

Incremental Mature Garbage Collection Using the Train Algorithm

http://www.daimi.au.dk/~beta/Papers/Train/train.html

写得都非常棒

4.与垃圾回收相关的主要是System.gc()和finialize()方法。

5.还有一些jvm关于垃圾回收的调优或者回收算法选择可以去google一下

评论

相关推荐

    大话Java性能优化

    前言 第1章 性能调优策略概述 ...7.3 垃圾回收机制相关 7.4 实用JVM实验 7.5 本章小结 第8章 其他优化建议 8.1 Java现有机制及未来发展 8.2 系统架构优化建议 8.3 与编程无关 8.4 本章小结

    疯狂JAVA讲义

    1.7 垃圾回收机制 20 1.8 何时开始使用IDE工具 21 学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 ...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 13 1.5 实战:自己编译JDK / 13 1.5.1 获取JDK源码 / 13 1.5.2 系统需求 / 14 1.5.3 构建编译环境 / 15 1.5.4 准备依赖项 / 17 1.5.5 进行编译 / 18 1.6 本章小结 / 21 第二部分 自动内存管理机制 ...

    Java虚拟机

    1.7 本章小结 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行...

    java范例开发大全源代码

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 ...

    java范例开发大全

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    Java范例开发大全 (源程序)

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  ...

    突破程序员基本功的16课.part2

    4.3 垃圾回收机制 4.3.1 垃圾回收的基本算法 4.3.2 堆内存的分代回收 4.3.3 与垃圾回收的附加选项 4.3.4 常见垃圾回收器 4.4 内存管理的小技巧 4.4.1 尽量使用直接量 4.4.2 使用StringBuilder和StringBuffer...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    视频目录 第1节说在前面的话 [免费观看] 00:05:07分钟 | 第2节整个部分要讲的内容说明 [免费观看] 00:06:58分钟 | 第3节环境搭建以及jdk,...第104节字节码执行引擎小结00:03:38分钟 | 第105节总结与回顾00:10:55分钟

    Java范例开发大全(全书源程序)

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界...

    java范例开发大全(pdf&源码)

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    《深入理解Android》卷Ⅰ

    2.4.7 垃圾回收 2.4.8 JNI中的异常处理 2.5 本章小结 第3章 深入理解init 3.1 概述 3.2 init分析 3.2.1 解析配置文件 3.2.2 解析service 3.2.3 init控制service 3.2.4 属性服务 3.3 本章小结 第4章 深入理解zygote...

    Android典型技术模块开发详解

    16.1.1 垃圾回收 16.1.2 内存分配 16.2 Android优化 16.2.1 内存分配跟踪Allocation Tracker 16.2.2 内存监控Heap 16.2.3 内存分析MAT 16.2.4 如何避免内存泄漏 16.3 ActivityGroup 16.4 ViewStub 16.5 Bitmap内存...

    java程序设计与开发课件

    1.3.3 垃圾回收机制····························· (3) 1.3.4 代码安全检测····························· (4) 1.4 Java的3种版本··········...

    Flex企业应用开发实战源代码

    1.5 小结 20 第2章 Flex企业应用开发基础 21 2.1 MXML语言 21 2.1.1 用MXML表示ActionScript对象 22 2.1.2 查看由MXML文件所翻译的ActionScript代码 24 2.1.3 IMXMLObject接口 25 2.2 客户端保持状态 28 2.3 ...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第104讲 字节码执行引擎小结 00:03:38  第105讲 总结与回顾 00:10:55  第106讲 happens-before简单概述 00:15:17  第107讲 重排序问题 00:23:19  第108讲 锁的内存语义 00:13:54  第109讲 volatile的...

    深入理解Android卷1全

    2.4.7 垃圾回收 / 29 2.4.8 JNI中的异常处理 / 32 2.5 本章小结 / 32 第3章 深入理解init / 33 3.1 概述 / 34 3.2 init分析 / 34 3.2.1 解析配置文件 / 38 3.2.2 解析service / 42 3.2.3 init控制service / 48 3.2.4...

    深入理解Android:卷I--详细书签版

    2.4.7 垃圾回收 29 2.4.8 JNI中的异常处理 32 2.5 本章小结 32 第3章 深入理解init 33 3.1 概述 34 3.2 init分析 34 3.2.1 解析配置文件 38 3.2.2 解析service 42 3.2.3 init控制service 48 3.2.4 属性服务...

    Android学习系列教程实例.pdf

    目录 Android 学习文档总结 ................... 1 DevDiv 推荐资源 ........................ 2 Windows 8 ..............................................................iOS .......................................

Global site tag (gtag.js) - Google Analytics