大漠行者 发表于 2008-12-18 09:26:50

隐式内存泄漏的常见原因

<TABLE style="WIDTH: 648pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=864 border=0 x:str>
<COLGROUP>
<COL style="WIDTH: 648pt; mso-width-source: userset; mso-width-alt: 31597" width=864>
<TBODY>
<TR style="HEIGHT: 192.75pt" height=257>
<TD class=xl27 style="BORDER-RIGHT: #e0dfe3; BORDER-TOP: #e0dfe3; BORDER-LEFT: #e0dfe3; WIDTH: 648pt; BORDER-BOTTOM: #e0dfe3; HEIGHT: 192.75pt; BACKGROUND-COLOR: transparent" width=864 height=257>
<P><FONT size=2><FONT face=宋体>内存泄漏(memory leak)是导致内存溢出(outOfMemory)的原因,通常的内存泄漏是指对象生命周期完结后,改对象的引用空间没有释放,常见于C.而java有GC机制不存在内存泄漏问题,但是隐式的(perceived)内存泄漏还是有的:</FONT></FONT></P>
<P><FONT class=font7><STRONG><FONT face=宋体 size=2>1.Hash tables</FONT></STRONG></FONT><FONT class=font6><BR><FONT face=宋体 size=2>&nbsp;&nbsp; 任何存放在Hashtables中的对象如果不显示的remove,该对象不会被GC回收。<BR></FONT></FONT><FONT class=font7 face=宋体 size=2><STRONG>2.Static class data</STRONG></FONT></P>
<P><STRONG><FONT face=宋体 size=2></FONT></STRONG><FONT class=font6>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从来不会被回收<BR></FONT><FONT class=font7 face=宋体 size=2><STRONG>3.JNI references</STRONG></FONT></P>
<P><FONT face=宋体 size=2><STRONG>&nbsp;&nbsp;</STRONG>GC无法追踪本地代码的引用,因此只能显示回收。</FONT><FONT class=font6><BR></FONT><FONT class=font7 face=宋体 size=2><STRONG>4.Objects with finalizers</STRONG></FONT></P>
<P><FONT class=font6>&nbsp;&nbsp;&nbsp;&nbsp;Finalizer 是单独运行在一个线程里,所以对象不一定会被回收。<FONT face=宋体 size=2><BR></FONT></FONT></P></TD></TR></TBODY></TABLE>
页: [1]
查看完整版本: 隐式内存泄漏的常见原因