快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

java defunct产生的原因和解决办法

java defunct产生的原因和解决办法:

在很多时候,我们启动JAVA进程后,假如退出这个JAVA进程,在系统进程中仍旧可以看到这个进程.
这种情况一般出现在UNIX/LINUX系统,对于WIN平台出现情况较少.

这个进程在UNIX平台上,你即使kill进程号也不能杀掉它,但它仍旧占用系统资源,成了真正的"僵尸"。

产生的原因:
以前我们下载JDK时,可以下载到JDK的SRC然后自己编译,现在的官方网站上已经找不到可以自己编
译的JDK包,下载回来的JDK都是释放包,我们可以想象,无论SUN在发布JDK时考虑得如何完美,本地
库都不可能完全和当前系统的版本号完全一致。举个例子,如果System.gc()调用了本地库glic6.0.2.so
那么在当前系统上没有这个版本的库或没有这个版本的库的链结,那么gc()方式肯定不能准确工作。
当然sun在发布的时候可能会把这个本地库打包在JDK发行包中,但glic6.0.2.so中又调用了其它库,如
subglic6.0.21.so,即使系统中存在完全一样的glic6.0.2.so,但你无法确认它调用的库又完全匹配,
事实上这几乎是不可能完全匹配的。

正是这样本地库版本号的不一致,才使得需要调用本地库的JVM底层功能不能准确工作,所以清除,
退出进程等工作就可能无法完成,产生了java defunct。

知道了问题的原因,就能从多方面解决了。假如我们的JDK的src版进行编译安装而不是用SUN提供好的
本地库,当然不会存在上面的问题,但现在好象已经不提供src编译安装的发布包了,所以指定内核版本
号,以便使它和JDK发布时使用的版本相一致,可以基本解决java defunct。

如果你不知道当前JDK的本地库是基于什么内核版本号发布的,一般来说,应该提供系统当前的内核版本号:

在Linux下,先查看当前的内核版本:
uname -r
2.4.21-4.EL
把主版本号COPY下来,调用:
LD_ASSUME_KERNEL=2.4.21-4
export LD_ASSUME_KERNEL

假如你知道某个版本的JDK中的本地库是基于某个内核版本发而布的那你可以直接指定LD_ASSUME_KERNEL为
这个版本,这样会获得最大的一致性




返回类别: 教程
上一教程: Java多线程程序设计
下一教程: 简化spring(5)--减少不必要的基于接口编程

您可以阅读与"java defunct产生的原因和解决办法"相关的教程:
· PHP和JAVA的XML-RPC中文问题解决办法
· Javamail中的常见中文乱码问题与解决办法(综合)
· 使用STRUTS在框架页面中不能指定目标框架的一个解决办法
· 在JSP程序读取或向DB写入数据乱码解决办法
· JSP连接SYBASE数据库中文显示问题终极解决办法
    微笑服务 优质保证 索取样品