作者:Flyingis
用Java進(jìn)行ArcEngine或ArcGIS Server開發(fā),在底層實(shí)際上是用Java調(diào)用AO COM對(duì)象,ESRI用Jintegra庫來解決Java對(duì)COM的調(diào)用問題,如果Java對(duì)象不再使用,Java虛擬機(jī)會(huì)自動(dòng)將這些對(duì)象回收,然后 Jintegra將這些對(duì)象所指的實(shí)際COM對(duì)象銷毀,默認(rèn)情況下時(shí)間間隔是10秒,對(duì)于快速大量調(diào)用COM對(duì)象的操作來說,如在循環(huán)中,COM對(duì)象往往得不到及時(shí)的銷毀,以至于內(nèi)存報(bào)錯(cuò),這時(shí)我們需要手動(dòng)銷毀COM。
Jintegra釋放方法:
com.linar.jintegra.Cleaner.release(objectRef);
在ArcEngine和ArcGIS Server中如何釋放COM呢?Jintegra為ArcObjects生成了一組proxy類,可以參考com.esri.arcgis.interop命名空間,經(jīng)常用的是 com.esri.arcgis.interop.Cleaner,它的release(java.lang.Object anObject)和releaseAll()用來釋放指定的或所有的COM對(duì)象,同時(shí)可以為COM連接和釋放增加監(jiān)聽, addConnectionListener(ConnectionListener listener)和allUnreferencedListener(Unreferenced listener)。
同時(shí)可以參考:
HowTo: Explicitly release a COM object accessed in a Java application
J-Integra for COM Document
Garbage Collection: Releasing Java References to COM Objects
Java調(diào)用COM的中間件Jintegra初探