注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

用jacob的时候注意内存的释放out of memory out of heap  

2010-03-04 14:56:09|  分类: 项目开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: - 和申 - 和申的个人主页

 

我在用jacob调用com组件的时候,我在程序中会反复的调用某个方法数百万次,遇到了内存不停的增长,com组件已经释放了内存,原来内存的泄露在jacob上。

我用的是 JACOB Version 1.7

 

Dispatch dis = new Dispatch("TsetCOM.TestWriter.1");

调用dis.safeRelease();会释放部分内存,但内存会继续增长

在调用完com组件后调用 

ComThread.Release()可以释放掉调用com控件时占用的内存

--------------------------------------------------------------------------------------

    在JACOB1.7的版本中,所有的jacob包装的com 对象都继承自com.jacob.com.JacobObject.这些对象有一

些专门的代码来把它们自己注册在com.jacob.com.ROT对象中(ROT 就是一个运行时的对象表).这个表包含

了一个线程创建的 JacobObjects 对象的信息。因此,当我们调用ComThread.Release()的时候,ROT会检查

是否这个线程创建了一些对象,并且这些对象是由调用它们的 native release 方法来释放的。

这个生命周期管理的方法与这个线程的生命周期有关而与GC无关。JacobObject对象仍然有finalizers,但它

们一般不会执行native release方法,直到它们被调用时才执行本地的native release 方法。这个本地的

native release 方法可以被调用多次而不必担心会出现异常。

    如果我们处理我们自己的对象的时候,选择去调用这个release方法也是允许的。如果我们自动调用的话

,在线程被释放的时候,release的方法会被调用,但不会有任何操作。

    需要注意的是在任何线程不再需要的时候,可以退出的时候,最好主动的调用ComThread.Release() 。

否则,它们就等待自动回收,我们就没有办法知道何时这些对象释放,可能会是任意一个不确定的时间来释放它们。

 

org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: - 和申 - 和申的个人主页

 http://asdcls.javaeye.com/blog/607776

  评论这张
 
阅读(852)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016