① AJDK-AOT静态编译
Go语言受到青睐于云上新应用,主要因其运行时无依赖,静态编译的程序启动速度快,无需JIT预热。
java的静态编译技术作为激进的AOT技术,通过独立编译阶段将Java程序转化为本地代码,运行时不需传统Java虚拟机和运行时环境,仅需操作系统类库支持。
静态编译技术使Java语言与原生native程序“合体”,将Java程序编译为自举的具有Java行为的原生native程序,兼备Java程序与原生native程序的优点。
Java编译流程包括前端编译、即时编译(JIT编译)与静态提前编译(AOT编译)。
前端编译将Java源码(.java)转化为Class文件(.class),实现程序转化为满足JVM规范的功能,优化侧重于程序编码,编译为Class文件可直接给JVM解释器执行,省去编译时间,加快启动速度。
后端编译(JIT编译)通过JVM内置的即时编译器,在运行时将Class文件字节码编译成本地机器码,优化程序运行性能,提高执行效率。
静态提前编译(AOT编译)程序运行前,直接将Java源码编译成本地机器码,优点在于启动速度快,缺点是静态编译后性能优化受限。
静态编译器如JAOTC、GCJ、Excelsior JET、ART等,尤其是ART虽然主要通过AOT编译支持Java运行,但仍然存在解释器。
目前Java体系主要采用前端编译+JIT编译方式,如JDK中的HotSpot虚拟机,通过前端编译生成Class文件,启动时解释执行以节省时间,运行中通过JIT编译优化热点代码提高执行效率。
JIT编译与AOT编译比较,JIT吞吐量高,有运行时性能加成,执行更快,但启动速度较慢,需要时间与调用频率触发分层机制;AOT编译内存占用低,启动速度快,无运行时性能加成,不能动态优化。
Java 9引入AOT编译,能将class文件直接编译成可执行二进制文件。
在JVM团队与SOFAStack团队合作下,AJDK实现静态编译的落地,将应用启动时间从60秒优化至3.8秒,双十一期间应用运行稳定,无故障,GC停顿时间在100毫秒,内存占用和RT响应与传统Java应用持平,启动时间降低2000%。
综上所述,静态编译在稳定性、资源占用、RT响应等方面指标与传统Java应用基本持平,启动时间显着缩短。
python是解释语言,c++是编程语言。
1、编译器是off-line,解释器是on-line。编译器把整个程序读进来,进行一系列变大变小转化优化的过程,产生可执行文件,然后编译器退出,由可执行文件来读取和输出数据,python main.py这个命令会启动python虚拟机和解释器,将main.py的代码一行一行解释,只不过不同于REPL,它不会把每一行表达式的值打印出来。
2、Python是一种解释执行的语言,Python的缩进要求十分严格,通过缩进来区别代码块,C++是一种需要编译执行的语言,通过大括号来区分代码块。C++的工作方式是,首先将写好的代码保存到扩展名为.cpp的文件中,然后编译.cpp文件。编译器将C++代码转换为原生代码。然后执行这些机器代码。因此,C++非常靠近硬件。
、C++和Python都是从C语言演变出来的面向对象的编程语言,将相关数据和操作数据的方法打包成一个类,不同的类相互隔离,也可以自由组合,类是一组数据以及操这组数据的函数(方法)的集合。类是对象的抽象模板,对象是类的具体实例,给类的数据取不同的值,同一个类就产成了不同的对象。