静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了。。大多数ppc的硬件配置还是很一般的。。。。。。
动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。。。。。
简单的打个比方,我写个阅读器,支持txt,pdf,udm三种格式,暂时把读txt,读pdf,读udm定义为三个功能模块。
使用静态编译:我想看个txt,点击应用程序图标以后三个功能都加载进来了,判断格式,使用读txt模块。。。(在这里,另外两个模块的作用就是占用系统资源。。。。-。-)
使用动态编译:我想看个txt,点击应用程序,判断格式,只加载读txt模块,使用读txt模块。。。
显然,动态编译1速度快,2节省了系统资源,3利于今后拓展。。。。。。。。
以下是2个比较形象的解释:
一个是租自行车,什么时候骑什么时候租,有新车就租新车,没新车就租旧车,有电动车就省点劲,碰上没车座子的就扎屁股,人家不出租了你就别用了。
一个是自己买个自行车天天扛着,进电梯上地铁也扛着。老子自己的车,想什么时候骑就什么时候骑,不用看出租自行车老大妈的脸色。
用静态链接库编译,相当于你带着一个工具包到处跑(遇到有需要的地方不需要周围的环境提供相应的工具,自己用自己工具包的工具就行了,所以当环境发生变化可以尽可能的无视),当然,你本来不带任何东西走到哪是哪和工具包随身带的区别显然就是重量增加了,即程序的体积可能会比另一种方式来的大一点,看你的工具包有多大了。
仅此记录,以作学习之用。
Java编译时间:是指虚拟机的JIT编译器编译热点代码的时间,我们知道Java语言的跨平台,编译出的class文件中存储的是字节码,虚拟机通过解释的方式执行字节码文件,比起C、C++的本地二进制代码速度慢很多,JDK1.2后虚拟机内置了两个运行时编译器,如果一个Java方法,被调用次数达到一定程度,就会被判定为热代码,交给JIT编译器编译为本地代码,提高运行速度,C、C++是静态编译,而java是动态编译