首页 > 其他 > 详细

垃圾回收机制与内存泄漏之间的关系

时间:2016-04-14 02:03:22      阅读:229      评论:0      收藏:0      [点我收藏+]

?????????????????????????? ??????? GC(Garbage collection) 英语直译,垃圾收集

?

【编程中的小确幸】:

?????????? 你是幸运的,作为一名JAVA程序员,有些时候室内打扫卫生不需要你做,自有人替你打扫,这样想一想是不是很爽。

??????????? 但是作为一名资深从C,C++,走过来的人来说,在C和C++里面是要求程序员强制回收垃圾的。

===================================================================================

【举个栗子】:

??????????? java中创建一个数据,必须NEW一个对不对,这就是占用的内存,必须有一个方法需要回收当这个数组不再被需要时所占用的内存。其实就是由New调用的在不可访问内存中锁调用的数据。很多程序员也习惯于把一个数组所有引用设置为null这就是强制垃圾回收,

这里为什么要讲到内存泄漏问题?这是因为虽然我们在jAVA里面会有垃圾自动回收机制,我们很多时候不用去管他,但是这个习惯如果带到C或C++,就会导致内存泄漏。

===================================================================================

【C,C++内存泄漏】:

?????????? C,C++明确要求程序员释放不再被需要的内存。如果忘记了,可能就是一个几百个字节。也许你运行在一个至少几百兆的内存中,但是当这个方法可能正在一个循环中被调用,你可以想想接下来多么恐怖了。内存不够用了,接下来的新数组分配不到足够的内存时。就会造成你的程序崩溃,???这也是因为可用的内存池逐渐减少的原因。

?===================================================================================

【什么时候调用GC?】:

???????? 同样用代码说明这个例子:

???????????

void usaArray(int  size){

         int[]  firstArray=new int[size];
         int[]  secondArray=firstArray;
         int[]   thirdArray=secondArray;




}

?

就是这个简单的代码:

???????????执行到最后,返回,指向这个数组的三个引用全没了,就好像干了无用功一样,这个数组开辟的内存空间不久就被回收了。

================================================================================

【什么情况下触发】:

????? 1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当???????应用忙时,GC线程就不会被调用,但以下条件除外。

  2)Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不???????????? 足,?JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。

????

?

?

垃圾回收机制与内存泄漏之间的关系

原文:http://429899791.iteye.com/blog/2290118

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!