与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。通常class文件仅在需要使用时才加载。 这本身就是一种动态链接。 Java作为一种天生的动态链接语言,无法支持静态链接。但C语言的静态库除了静态链接的概念外,还隐含了一层意思,即库中的代码会打包到可执行文件中。JAVA中的JAR某种程度上类似一个可执行文件或库,借用C语言中静态库和动态库的概念,这里把最终会合并到生成的JAR文件中的JAR包叫静态库,反之仅仅在编译中使用,并不打包到生成的JAR包中,运行时需系统自行提供的JAR包叫动态库。
C的静态链接只把需要的代码复制过来,而Java用类似Fat Jar的方法,把所有的依赖库打包到最后的库中,眉毛胡子一把抓。这个问题可以用ProGuard解决,用它自己的话说是 It detects and removes unused classes, fields, methods, and attributes。
Fat Jar 、ProGuard如何解决,作用是什么
原文链接:http://zhidao.baidu.com/link?url=pc0szdts51Kc4HkC3699fVoD4POHppVpQL2B7Ith5voUCPuQLw9fjL7vZnhN-aJRtttgUr2tCvzInMIKAEx5MMEOU1Hhu-xg8VRnUecIqcG