为发布一个单窗口桌面应用,不想带几十兆的jre. 
按 java -jar -verbose:class test.jar >> 1.txt  进行抽取.复制.打包成新的rt.jar; 
--------------------------------------------------------------- 
结果: 
用新的jre(包含新抽取的rt.jar) 运行, 
.\jre\java -jar test.jar 
程序可以正常运行.没有错误 程序退出时,,进程里两个java.exe只有一个自动关闭掉.另一个java.exe进程不能自动关闭. 用本机原来的jre运行 
java -jar test.jar 
程序一切正常,退出时,两个java.exe都可以自动关闭. ---------------------------------------------------------------- 怀疑: 
抽取rt.jar时,对rt.jar中垃圾收集,资源释放等的class没有抽取出来 请问: 
1: rt.jar中负责释放相关资源的包或者类有 哪些? 
2: 这种情况或者还有别的原因? 

解决方案 »

  1.   

    lang包的System类定义了gc应该是负责向jvm发送相关请求的
      

  2.   

    现在 jdk出面向消费者的 jre了//         据说大小只有4~5M . 应该满足你要求了吧. 
      

  3.   


    lang包中System;System$1;System$2
    打包进去,没有变化;还是没有解决
      

  4.   

    我觉得未必是垃圾回收的问题你虽然按照-verbose找到需要加载的所有类,但这些只是你启动所需要加载的类,你能正常启动
    Java是可以在运行时随时加载需要的类,当程序启动没有用到这些类时是不需要加载的,所以不会出现在-verbose里我的建议是:
    1、你可以用别的性能测量工具,把所有功能都跑一遍,找齐全要加载的所有类
    2、你可以从源代码下手,看看哪些是在运行时导入的
    3、你可以使用小的JRE,类似2楼说的
      

  5.   

    http://sourceforge.net/projects/mywork建议看看 mywork提取的rt.jar
    不光rt.jar可以减肥
      

  6.   

    用pack压缩,安装或者使用的时候解压,效果非常好.