打造Java绿色程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
打造Java绿色程序

打造Java绿色程序 董洪蒙 (江苏淮安食品职业技术学院,江苏淮安 223003) ? ??? 摘? 要 通过对Java运行时环境jre运行机理的深入分析,提出了如何解决Java程序发布问题的新思路,将其制作为符合软件发展潮流的绿色形式,大幅度削减jre的体积,以便于发布程序包的网络传递和存储。完成了核心程序的编写,综合运用了Java语言的多项知识点。 ? ??? 关键词 绿色;jre;Process;Exception;Stream;jar ? 1? 引言 ??? 鉴于Windows系统对于Java采取的“彻底不合作”态度,Java程序作者经常面对如何在 Windows平台下分发程序的问题,怎么保证目标机上有jre呢?打包一个?一个jre几十Mb(笔者使用的j2sdk1.4.3_13的jre目录共 计49.5Mb)。若是面向企业应用的大工程,这也就不成问题,但如果仅仅是一些面向桌面的应用程序,.class文件仅2-3Mb,就要带个几十Mb的 jre,恐怕不仅用户难以满意,自己也觉得说不过去,更令人头疼的是:jdk版本众多,现在已发展至1.6以上版本,如果在用户机器上安装了多个Java 程序,也就极有可能安装了多个jre版本,众所周知,多个jre版本在机器上共存,对于开发者来讲,需要很小心地处理,以避免出现各种莫名其妙的问题,而 对于普通用户而言,版本间的冲突只会使其不明所以,徒增对程序作者甚至是Java的恶感。 ??? 笔者在长期工作过程中,深感软件行业越来越提倡开发、使用绿色软件,即一个软件应尽可能不影响系 统、不影响其它软件,软件运行所需的动态库不在系统目录下共享,而是在自身目录下,删除该目录也即卸载了该软件,当然这个现象的背景是当今大容量磁盘的价 格越来越低。Java程序要实现这种绿色的特性,其关键是:①要对.class文件和jre环境进行捆绑,置于同一目录下;②要尽可能地对jre进行减 肥,毕竟一个非企业级应用的软件动辄几十兆还是有些过分了。要解决这两点,首先要对jre的运行机理有深入理解,说得通俗一点:Java.exe运行时是 如何找到jre,从而保证.class运行的? 2? jre运行机理 ??? 众所周知java.exe是.class文件的执行程序,但实际上java.exe程序只是一个执 行的外壳,它会装载jvm.dll,这个动态链接库才是Java虚拟机的实际操作处理所在,所以在这里要对jdk源代码作一番剖析,笔者这里使用的源码版 本是JavaTM 2 SDK,Standard Edition,v1.4.2 fcs Community Source Release,主要分析的源文件为:j2se\src\share\bin\java.c。 ??? java.c源代码中通过JAVA_ARGS宏来控制生成的代码,如果该宏没定义则编译文件控制生成??? java.exe,否则编译文件控制生成其他的“Java程序”,如javac.exe、javadoc.exe等。 ??? java.c的main()函数中前面一段为重新分配参数指针的处理。然后调用函数:CreateExecutionEnvironment,该函数主要查找jre的目录,以及jvm.dll这个虚拟机核心动态链接库文件路径所在。下面分而述之: ??? (1)查找jre路径,这主要是通过调用GetJREPath实现的。 ??? 该函数首先调用GetApplicationHome函数,GetApplicationHome 函数调用windows API函数GetModuleFileName取java.exe程序的绝对路径,以我的jdk安装路径为例,为:“C:\j2sdk1.4.2_13\ bin\java.exe”,然后去掉文件名取路径为:“C:\j2sdk1.4.2_13\bin”,之后会再去掉最后一级目录,现在路径为:“C:\ j2sdk1.4.2_13”。 ??? 然后GetJREPath函数继续判断“C:\j2sdk1.4.2_13”路径+bin\ java.dll组合成的这个java.dll文件是否存在,如果存在则“C:\j2sdk1.4.2_13”为jre路径(第1种情况: java.exe的父目录),否则判断取得的“C:\j2sdk1.4.2_13”路径+\jre\bin\java.dll文件是否存在,存在则“C: \j2sdk1.4.2_13\jre”为jre路径(第2种情况:java.exe父目录的子目录/jre/)。如果上面两种情况都不存在,则通过 GetPublicJREHome函数从注册表中去查找。 ??? GetPublicJREHome取得HKEY_LOCAL_MACHINE\ Software\JavaSoft\Java Runt

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档