gc运作流程和底层实现

标签: java垃圾回收
26人阅读 评论(0) 收藏 举报
分类:

  Garbage Collection简称为GC,即垃圾回收。内存处理器是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。Java语言提供的GC功能可以自动的检测对象是否超过作用域,从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显示操作方法,资源回收工作全部交由GC来完成,程序员不能精确的控制垃圾回收的时机。

GC在实现垃圾回收时的基本原理:

    Java的内存管理实际就是对象的管理,其中包括对像的分配和释放。对于程序员来说,分配对象使用new关键字,释放对象时只是将对象赋值为null,让程序员不能够再访问到这个对象,该对象被称为“不可达”。GC将负责回收所有“不可达”对象的内存空间。

  对于GC来说,当程序员创建对象时,GC就开始监控这个对象地址、大小以及使用情况。通常GC采用有向图的方式记录并管理堆中的所有对象,通过这种方式确定哪些对象是“可达”的,哪些对象是“不可达”的。当GC确定一些对象为“不可达时”GC就有责任回收这些内存空间,但为了GC能够在不同的平台上实现,java规范对GC的很多行为都没有进行严格的规定。例如对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定,因此不同的JVM实现着不同的的实现算法,这也给JAVA程序员的开发带来了很多不确定性。

     根据GC的工作原理,可以通过一些技巧让GC运行更加高效合理。如下:

1、尽早释放无用对象的引用,特别注意一些复杂对象,如数组,队列等。对于此类对象,GC回收它们的效率一般较低,如果程序允许,应尽早将不用的引用对象赋为null,这样可以加速GC的工作。

2、尽量少用finalize函数。finalize是java提供给程序员用来释放对象或资源的函数,但是它会加大GC的工作量,因此尽量少采用finalize函数回收资源。 当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。

finalize是方法名,java技术允许使用finalize()方法在垃圾收集器从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象的调用的。它是在Object类定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象的调用的。

想要知道更多,推荐:JVM结构、GC工作机制详解 - CSDN博客 https://blog.csdn.net/tonytfjing/article/details/44278233

查看评论

javaGC流程

Java垃圾回收概况   Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃...
  • yangyang12345555
  • yangyang12345555
  • 2018-02-05 10:08:13
  • 299

JVM的底层实现原理

JVM是Java程序运行的环境,但是他同时也是一个操作系统的一个应用程序的一个进程,因此JVM也有他自己的运行生命周期,也有自己的代码和数据空间。 JDK JDK在Java的整个体系中充当...
  • fangqun663775
  • fangqun663775
  • 2017-01-16 17:31:06
  • 3505

golang的goroutine是如何实现的

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 链接:http://www.zhihu.com/question/20862617 来源:知乎 我知道同步并...
  • u014675528
  • u014675528
  • 2016-01-22 16:56:04
  • 1290

JVM中的内存分配及GC回收过程简单整理

哦哦
  • lanzi0907
  • lanzi0907
  • 2015-04-07 21:13:41
  • 2418

生产与服务运作管理中的优化问题

  • 2010年07月27日 17:30
  • 277KB
  • 下载

struts1.x+ibatis+spring配置整合

SSH想必为大家所熟悉,其应用也相当之广泛;SSI其实也是一种很好的组合,应用与小中型系统,且简单快捷,下面就说一下struts+spring+ibatis的配置 web.xml ...
  • yyw6637
  • yyw6637
  • 2013-04-10 15:35:51
  • 556

电商操作业务流程

  • 2015年01月06日 00:08
  • 67KB
  • 下载

广州本田整车订单系统

代码行数:11,000+            工作日:30 Day 关键技术:SqlService、VisualStudio、C# mvc(model+view+controllerS)、linq ...
  • zhong2zheng0319
  • zhong2zheng0319
  • 2017-05-24 14:40:25
  • 706

标准化项目工作流程管理

  • 2013年04月16日 16:31
  • 15KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 209
    积分: 83
    排名: 152万+
    文章存档