带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(2)

本文涉及的产品
函数计算FC,每月15万CU 3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(2)

带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(1)https://developer.aliyun.com/article/1377535

2. 静态编译技术

 

image.png

 

 

基于以上的两个问题,是否有相应的解决办法呢?

 

那就回到我们今天的主题静态编译技术,它能够有效的帮助我们解决掉。

 

静态的反义词是动态的,刚才介绍的Java就是运行过程中动态的编译。如果看过一些英文资料,应该知道一个词叫AOT(Ahead of Time),即提前编译,它和静态编译是一个意思,只不过是不同的说法。所以静态编译技术就是在应用没有正式运行之前,对其进行编译处理,运行过程中我们就直接运行编译好的程序即可。

 

上图左侧中右半部分就是正常的JVM的运行方式,左半部分是Java Web应用采用了静态编译技术的运行方式。首先也是写一个Java的代码,但它没有编译的过程,它直接把Java程序通过静态编译成了一个Native Image的可执行文件。这个可执行文件和执行环境是强相关的,所以直接运行就可以了。

 

那么静态编译的输入是什么?

静态编译下,针对垃圾回收问题如何解决?

 

如上图右侧所示,是一个静态编译的详细解读。最左侧是应用静态编译之前的输入,比如应用程序、应用程序依赖的三方库、JDK里的依赖、Substrate VM。

 

Substrate VM是静态编译中很重要的运行时,它包括静态的编译器、垃圾回收模块,比如GraalVM,它在之前的社区版本里,支持SerialGC的垃圾回收算法,商业化的支持G1。但在最新版本里,开源的社区版也支持G1垃圾收集器

 

image.png 

 

那么静态编译如何解决前面的两个问题的呢?

 

静态编译之后它就没有了JVM初始化的启动过程,也就是上图中红色的部分就没有了。解释执行和即时编译的部分也没有了,也就是浅绿色和的部分。即时编译的部分也没有了,它的内加载过程会比原来少很多,因为做了很多的编译优化。因此它一启动,执行的就是深绿色的部分,这样之前冷启动的问题就非常有效的解决了。

 

另外,静态编译后也不需要加载虚拟机,也不需要加载那么多的类了,因为它会利用静态编译,通过静态分析把和应用运行无关的类,剔除在最终可执行文件以外。把程序运行的过程中,只会把我们必须的内容编译到可执行文件里面来,让我们的运行内存得到有效的降低。

 

上图右侧是微服务的框架,在适配了静态编译之后,展示了在启动速度、运行时、内存占用方面的表现,可以看到提升还是非常大的。


带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(3)https://developer.aliyun.com/article/1377533

 

相关文章
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
114 0
|
3月前
|
Ubuntu Java 应用服务中间件
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
95 0
|
1月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
33 4
|
1月前
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
3月前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
3月前
|
Kubernetes 安全 Serverless
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
71 5
|
3月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
207 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
3月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
76 3
|
3月前
|
Ubuntu Java 应用服务中间件
在Ubuntu 16.04上安装Apache Tomcat 8的方法
在Ubuntu 16.04上安装Apache Tomcat 8的方法
35 0
|
3月前
|
安全 Java 应用服务中间件
在CentOS 7上安装Apache Tomcat 8的方法
在CentOS 7上安装Apache Tomcat 8的方法
126 0

推荐镜像

更多