java
垃圾回收机制是怎样?/p>
手动管理内存
在介绍现代版的垃圾回收之前,我们先来简单地回顾下需要手
动地显式分配及释放内存的那些日子?/p>
如果你忘了去释放内存?/p>
那么
这块内存就无法重用了?/p>
这块内存被占有了却没被使用?/p>
这种场景?/p>
称之为内存泄露?/p>
下面是用
C
写的一个手动管理内存的简单例子:
intsend_request()
{
size_tn=read_size();
int*elements=malloc(n*sizeof(int));
if(read_elements(n,elements)<n)
{//elementsnotfreed!return-1;}//
?/p>
free(elements)
return0;}
可以看到,你很容易就会忘了释放内存。内存泄露曾经是个非
常普遍的问题?/p>
你只能通过不断地修复自己的代码来与它们进行抗争?/p>
因此?/p>
需要有一种更优雅的方式动释放无用内存?/p>
以便减少人为错误
的可能性。这种自动化过程又被称为垃圾回收
(
简?/p>
GC)
?/p>
智能指针
自动垃圾回收早期的一种实现便是引用计数。你知晓每一个对
象被引用了几次,
当计数器?/p>
0
的时候,
这个对象就可以被安全地回
收掉了?/p>
C++
的共享指针就是一个非常着名的例子?/p>