网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Maven 安装实践.
.Java Socket编程(三)-1.
.JDBC专题介绍(3).
.使用Log4j进行日志操作.
.3. Building View Components.
.在java中实现 AutoCAD api.
.菜鸟初学Java的备忘录(七).
.完整图解 Tomcat 5.0.28 安装笔记.
.Java2下Applet数字签名具体实现方.
.WindowsXP下JDK的配置.
.Java中几种常用数据类型之间转换.
.Java技巧:Java向Web站点发送POS.
.关于J2ME程序员新手开发入门的几.
.Java的网络功能与编程6.
.无线开发:如何使用kxml解析WAP.
.Javascript实例教程(3) 探测浏览.
.软件项目开发之 软件过程RUP初探.
.对等计算实践:基于 IP 多播的发.
.Java编程思想读书笔记(第5-7章.
.Windows下多线程编程技术及其实现.

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

发表日期:2008-1-5


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 树中 按最长路径行驶 人气:768
下一篇:用jscript对表单数据进行utf-8编码(无奈之下的做法) 人气:549
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐