精简JRE体积的小工具:http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx
项目地址:http://code.google.com/p/greenvm/
关键字:JRE,精简,压缩,JVM,JAVA.NET,虚拟机,绿色软件,最小空间,脱框,压缩,GREEN,GREENJVM
9月6日更新版本为 0.1.1.4
变更:
增加[SET_START_MAIN_CLASS_AUTO_LOAD]参数,当此项为真时,程序将设置主函数所在类开机自动启动。
增加初始化界面设置,参数如下:
- //程序启动前使用初始界面(此项为false时,以下设定皆无效)
- SET_START_INIT=true
- //使用的初始界面图片
- SET_START_IMAGE=init.bmp
- //设置true时初始窗体将自动居中,同时top及left无效
- SET_START_LOCATION_AUTO=true
- // 设置初始窗体在桌面的X轴
- SET_START_LOCATION_LEFT=100
- // 设置初始窗体在桌面的Y轴
- SET_START_LOCATION_TOP=100
- // 设定初始窗体显示时间
- SET_START_TIME=1000
PS:本文中所有关于JRE部分皆指Sun JRE。
众所周知,Java能够运行于近乎所有的操作系统,包括Windows、 Mac或Linux等等。
对于任何组织或个人的Java应用而言,只要你的应用程序需要移植或多OS发布,那么将现有应用从一个系统移植到另一个操作系统将是件非常轻松的事情,因为Java使用了虚拟机机制,可以脱离OS的约束而独立解释并执行class。
但有利也有弊,对于很多程序而言,这也同时意味着你的用户必须获得JRE支持,也就是说他需要安装JVM。但我国的现实情况却是很多人别说让他自己下载安装JRE,你就是给他做好全[下一步]的安装程序,他恐怕也连“下一步”都搞不定……||||
有鉴于此,我尝试提供一种解决方案,我将它命名为:GreenJVM,也就是绿色的JVM。
GreenJVM是一个专为绿化Java应用而存在的小程序,以C++开发(昨晚上抽空写的小应用程序,代码原型以前在Blog发过:通过exe启动class )。它的执行文件体积很小仅仅370KB,本身也是一个基于JNI的Java应用.真正的核心文件只有2个,一是GreenJVM.exe(执行文件),一个vm.cfg(配置文件),如下图:
它的功能非常简单,仅是解压自带的JRE并取代java.exe文件直接调度jvm.dll罢了。但就是这样一个小程序,却可以很轻松的实现Java软件的绿色发布。
以千里冰封兄的YOYOPlayer为例(冰封兄blog:http://www.blogjava.net/hadeslee/),我们都知道这是一个非常之好的Java音乐播放器,在Java圈内已经小有名气。但遗憾的是,对比千千静听这类知名软件而言,了解它的人简直比华南虎还要稀有......虽然软件普及率低的原因多种多样,但对Java应用而言,究其根本还是JVM安装的关系。就像“妈是女人”的道理一样,Java程序的运行环境必须有与其开发版本兼容的JRE存在,否则无法运作。也就是这道门槛,不知把多少普通用户拦在了Java应用之外。
可能你会说这些是小事,的确,对我们这些Java程序员来讲当然不存在任何问题;但令人遗憾的是,对绝大多数普通用户,特别是并不成熟的中国数亿网民而言(我是指软件知识的平均值……其实牛人也很多……),安装JRE这几乎是件不可想象的艰巨任务;除非他们有必须使用不可的理由,否则需要下载第三方软件的程序,绝对是第一时间被pass掉的(一般人使用软件的准则就一条:简单就用,麻烦就不用);无形中大大增加了Java软件普及的难度,明明是很好的程序,却只能在Java圈子里流传,不禁令人扼腕。
事实上,我们可以通过极简单的技术手段来突破这一限制,轻而易举将Java应用做成绿色软件,免除用户这些不必要犹豫,令他们放心大胆的使用Java程序。
这个过程仅仅需要三步:
1、压缩你的JRE:
目前GreenJVM支持rar和zip两种方式的解压。
2、设置vm.cfg:
vm.cfg内容配置如下:
- [LOON]
- /*虚拟机解压方式,0.1版仅提供RAR及ZIP两种,Windows平台下建议使用RAR(调用自带unrar.dll,故不要求本地
- 存在WinRAR,使用ZIP则可以删除unrar.dll)*/
- SET_UNPACK_METHOD=rar
- //虚拟机压缩包名称,要求配置在vm.cfg同路径下
- SET_VM_NAME=jre.pack
- //检测本地jvm版本,低于期望值时使用自带jvm,否则以本地虚拟机优先运行
- SET_START_REQUIRE_VERSION=1.6
- //期望加载的jar,多包以';'分隔
- SET_START_JAR_PATH=fps_test.jar
- //期望执行的main类
- SET_START_MAIN_CLASS=org/test/BallPanel
- //选填,尝试从指定环境变量获取jvm路径,存在则优先运行本地jvm
- //SET_START_ENV=JAVA_HOME
3、发布应用,此时只需一个文件夹,就可以完全容纳下整个Java应用了。
现在我们来看看一个基本完整JRE1.6压缩包(去掉了bin下的exe文件)与YOYOPlayer放在一起后的空间占用情况,如下图:
对比百来MB的JRE而言,现在总体不过20MB的体积已经是小的太多。只需直接丢给用户这个文件夹,告诉用户一句“双击EXE文件执行”,就能如常运行此程序,而不必再解释或说明什么。
但饶是如此,20MB的音乐播放器,相较2MB左右的千千静听而言还是太大了,对很多普通用户来说依旧难以接受,他们不会去考虑Java特性,只会去想“千千2MB就能搞定的事,你怎么就要用20MB才行?肯定是水平不行,不用……”,Java程序员们集体抱头哭~~~。为了避免这类情况的发生,这时就需要我们在jre的体积上做些文章了。
就和人的大脑活动区域一样,相对于我们每个应用而言,JRE中也至少会有20MB以上(只多不少)是被浪费掉的终身不使用区域,而这些区域中的组件及类库的唯一作用就是贪婪的占用硬盘空间罢了~因此找出这些区域并缩减它,就能最大限度的减小程序体积。(虽然sun或其它jvm提供商大多都反对这样,但我们只是在实验罢了:),况且我认为他们早晚也会开放jvm定制服务的。 )
以YOYOPlayer为例,实际上我们只需在JRE中保留其音频支持、AWT/SWing支持、及网络支持等部分就好,其余的部分大可删掉不要。
下例我做了一个精简的JRE压缩包,如下图:
只用了不足8MB的空间,便足以完成YOYOPlayer的全部功能.
我们把这个JRE和YOYOPlayer放在一起,全部加起来也不过9MB多一点,而YOYOPlayer依旧可以在无JRE系统中正常运行.效果如下图:
当然,如果再继续删的话,占用空间肯定还会有一定的下降幅度,我认为至少能将JRE压缩到6MB以内;但现实意义不大,毕竟不是做嵌入式开发,为了1,2MB费那么大劲不值当的……。事实上,对于绝大多数Java应用而言,压缩后至多9MB左右的空间占用便绰绰有余了,况且还有进一步精简的余地。
如下例,这是我以前在Blog发过的一个FPS测速程序,效果如下:
现在我使用一个针对AWT使用而精简的JRE,在另一台无Java环境的电脑上测试,结果如下图:
可以看到,程序正常运行,而且FPS数有明显提高,并没有因为直接调用JVM而削弱了性能.
这个完全支持AWT组件的JRE和执行程序全打成一个rar文件也不过4MB左右(PS:由于最占空间的JRE已经压缩过,所以再压缩其实意义不大……),实际上与本地程序的大小已经相差无几了.
不过就算是4MB的JRE也不能说很小了,如果愿意深度精简的话,2MB的JRE运行敝人的loonframework-game(尚未发布)都已经绰绰有余。就运行库而言,对比rmxp(ruby语言的游戏开发玩具……)还要小的多。
这些几MB的Java应用,放到U盘里随身携带绰绰有余,要用时在U盘里便可以直接运行(当然,由于api依赖的关系,除非我为其它平台重新制作启动文件,否则只支持提供win32 api的系统),不用了就直接删文件,环保安全无污染,标准的绿色食品,不买也看看啊~
再稍微正规点做个安装文件(绿色软件不能等同于无需安装的软件,毕竟安装只不过是个部署过程,和绿不绿色没有实质上关系。愚以为,只要不改变现有系统配置,不依赖本地系统组件的软件都可称为绿色软件;相反就算不用安装,一执行就注册到系统中一堆乱七八糟东西的软件同样不能说是绿色的。),那么程序的体积还将进一步减小。
以YOYOPlayer为例,最终提供给用户一个5MB甚至4MB左右的绿色应用是绝对可以做到的,对比5.2.1版占用2.85MB空间的千千静听来说,已经看不出两者间有太大区别,普通的音乐爱好者已经没有理由不下载看看了.
而一旦他们用了,就会慢慢发现Java应用的精妙之处,他会发现无论以后他用什么系统,这套软件他都将无法自拔的使用下去.
项目地址:http://code.google.com/p/greenvm/
————————————————————————————————————————————
0.1.1版发布:
项目地址:http://code.google.com/p/greenvm/
新增[SET_LOCAL_JRE_UPDATE]项,通过此项可以命令本地JRE自动更新。
一起发布的是一个Java仿雷电游戏(源码见包内),共设置有三关三个小BOSS。采用有GreenJVM发布,因此可以运行在未装载JRE的Windows系统之上。 (N久以前写的一个古董……凑活看吧……)。
准备写到1.0时再去Sourceforge申请项目……现在Loonframework还没弄完呢……
0.1.1.3版发布:
项目地址:http://code.google.com/p/greenvm/
新增7z格式压缩包解压支持,建议使用此格式进行虚拟机压缩。
_____________________________________________________________________________________________________________
_____________________________________________________________________________________________________________
GreenDotNet0.1.0
GreenDotNet是一个根据GreenJVM移植的应用,目标是实现.netframework虚拟机的绿色发布。
GreenDotNet 0.1.1 简要说明
1、本程序是一个非常简单的.Net程序免安装发布工具,可以满足绝大部分.Net framework2.0及以下环境开发之桌面应用的绿色发布及使用。
2、本程序目前阶段不尝试虚拟.Net运行环境(一是难写,二是敝人极懒,三我是Java程序员,明白?^^……),虚拟机初始化后将直接通过GreenDotNet.exe在Windows中布署最简.Net环境,故对程序运行效率无影响。
3、虚拟机压缩包中仅删除了System.Web(如果要用编码之类的功能自己实现就好,不然这堆东西也5MB左右呢|||),保留了其余一切链接库(如操作数据库必须的System.Data等,不要就自己删吧~),因此绝大多数操作皆可在此环境下正常使用。
4、由于采用了真实的Windows环境进行布署,因此加密或混淆后的.Net程序依旧可以正常在此环境下运行。
5、相较使用Salamander .NET Linker等收费工具(含使用飞信运行框架)而言,这只是一个简写的.Net布署方式,故而绝对不会存在版权或收费等问题。
相关文件说明:
GreenDotNet.exe : 启动文件,它将起到本地环境探针及布署.Net环境的作用。
vm.cfg : 配置文件,决定GreenDotNet.exe对系统进行的相关操作。
dotnet.pack(8MB) : 虚拟机压缩包,使用7z格式产生,目前仅提供.Net 2.0版本支持,不保证2.0以下或以上版本开发之应用在此环境能够正常运行。
vm.cfg配置如下:
- [LOON]
- //虚拟机解压方式,目前提供RAR、ZIP、7Z三种压缩方式的解压支持
- SET_UNPACK_METHOD=7z
- //虚拟机压缩包名称,要求配置在vm.cfg同路径下
- SET_VM_NAME=DotNet.pack
- //检测本地.net版本,低于期望值时使用自带.net,否则以本地虚拟机优先运行
- SET_START_REQUIRE_VERSION=1.1
- //期望执行的exe文件,要求与vm.cfg同路径下
- SET_START_MAIN_EXE=ComicStars.exe
项目地址:http://code.google.com/p/greenvm/
示例程序:
Zero漫天星辰漫画下载器是一个.Net的在线漫画检索及下载工具,采用.netframework1.1开发(使用.net纯粹是由于拖控件方便|||),作为GreenDotNet的示例程序一起发布.