domino中使用JAVA代理一定要小心,特别是R5的版本。
1、及时地对所用到Notes Object(session,agentContext,db,view,document. 等等)进行Recycle()处理。可以参考IBM网站上的这篇文章:
http://www-1.ibm.com/support/docview.wss?uid=swg21097861;
2、对于jar包的调用,最好放在notes.ini文件中,而不是在编写Java Agent的过程中处理,
我们可以将所调用到的jar文件丛中删除,在notes.ini文件中增加JavaUserClasses=pathjarFile,具体可以参考IBM网站上的这篇文章:
http://www-1.ibm.com/support/docview.wss?uid=swg27002721;
3、确认有足够的Java内存堆栈
缺省的情况下为64M,可以根据实际情况来调整堆栈大小,可以在notes.ini文件通过JavaMaxHeapSize参数进行调整,具体可以参照Administrator帮助;
4、监控JVM内存使用情况
通过Runtime.getRuntime().totalMemory() , Runtime.getRuntime().freeMemory()可以查看JVM内存使用情况;
5、使用System.gc()强行进行垃圾回收。
用户可以在notes.ini文件中增加了JavaVerboseGC = 1的参数,每次在执行该代理的时候观察内存泄漏的情况。
以前碰到一个很妖怪的情况,可以和大家分享,
通过在notes.ini中增加参数JavaUserClasses= pathfilename来存放jar包。但是将其放在Notes.ini的最后一行会有内存泄漏,后来将该参数没有放在最后一行,就不会有内存泄漏。