动态编译和静态编译及Java执行

静态编译就是在编译的时候把你所有的模块都编译进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是动态编译

区分对比

与动态编译的区别

动态编译的可执行文件需要附带一个的动态链接库。在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。