晓伟
支持👍🏻
2023-08-28
临风
java首先是通过javac编译成字节码,然后jvm才能通过执行字节码执行程序。jvm有两种执行方式,解释执行和编译执行,解释执行就是jvm直接翻译字节码为机器码运行,编译执行是jvm先将字节码编译成机器码并且缓存起来再执行。
很明显解释执行在第一次绝对是比编译执行快的,但如果一段代码执行的次数多了,那么编译执行的效率反而是比解释执行高了。所以jvm会将热点代码进行编译执行,而大部分代码仍然保持解释执行。这也是为什么Java需要运行一段时间才能达到性能巅峰的原因。
java使用c1(速度快、优化差、针对简单的逻辑)、c2(速度慢、优化好、针对复杂的逻辑)来进行编译,使用C++编写的,现在已经难以维护了。所以使用java推出了新的graal编译器代替c2编译器。这些编译器都属于JIT的范畴,都是在运行时去编译代码。
为了适应云原生的背景,java推出了aot,支持直接将java文件编译为二进制执行文件,使用graal VM代替jvm执行,实现了毫秒级的启动时间。由于没有了运行时,对整个java生态也提出了挑战,不过spring boot3已经率先支持了这一特性。
以上就是对本文的小结和自己一些简单的认识,如果有问题,还望老师指正。
作者回复:总结的非常好👍🏻
2023-08-29
5
quietwater
必须给老师点赞!!!这节课将SPI的方方面面都深入浅出地讲透彻了,我在网上看了很多关于SPI的文章,都没有讲清楚,让我产生了很多疑问,今天在这里都得到了解答和确认。
作者回复:感谢支持,欢迎一起交流、探讨
2023-09-13
3
编辑推荐
看过的人还看了