与普通程序不一样的是,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如何解决,做用是什么url
原文连接:http://zhidao.baidu.com/link?url=pc0szdts51Kc4HkC3699fVoD4POHppVpQL2B7Ith5voUCPuQLw9fjL7vZnhN-aJRtttgUr2tCvzInMIKAEx5MMEOU1Hhu-xg8VRnUecIqcGrem