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

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

GraalVM static compilation in web container application

1.  Java Web容器应用运行回顾

 

image.png 

 

在介绍静态编译在Web容器的应用之前,我们先来简单回顾一下,非静态编译或者说常规的Java Web容器的运行过程。

 

如上图所示,一个正常的Java应用,从编写代码、打包、运行过程,首先需要写一个.java的源文件,然后通过javac把源文件打包编译,编译成.class的字件码。运行过程就是虚拟机加载字节码做解释执行,或者在解释执行之后,对热点代码进行即时编译,这个就是Java应用的运行过程。

 

在这个过程里,因为有了字节码的概念,让Java Web容器或者Java应用实现写一次,让应用实现跟平台无关,这是它的设计优势。

 

image.png 

 

但这个优势是否就无可挑剔能够帮助Java应用广泛应用在各种场景下了呢答案是否定的。例如:有的时候我们会发现写一个很简单的Java程序的demo,代码可能不多,逻辑也不复杂,它的启动时间短则几秒或者十多秒,它的内存占用从几十兆到上百兆不等。但如果我们的应用想要快速扩缩容,就会对我们非常不利。

 

这个现象产生的原因,就如上图所示,首先会有一个虚拟机启动的过程,对应图中红色的部分。在Java程序没执行之前,会首先把虚拟机加载到内存里去。当虚拟机加载到内存里后,它就会去做类加载,就是应用程序的加载过程。就如图中浅蓝色的CL过程,它会把应用程序加载进去。之后JVM就会对程序进行解释执行了,这里要注意一下,它是解释执行不是编译,对应图中浅绿色的部分。

 

当解释执行产生,程序就运行起来了,就可以处理请求了。处理请求的过程中,它就会进行垃圾回收,对应图中黄色的部分。当程序逐步的运行时,一些方法和一些代码段会被反复的执行。在执行的次数很高的情况下,解释执行的性能就会变得比较差了。

 

这个时候在虚拟机里,会有一个叫即时编译JIT的概念,对应图中白色的部分。在我们的程序中它有一套规则,比如在一个时间内一个方法执行了500次,我们可能觉得它是个热点代码。然后我们对相关的代码通过JIT进行即时编译,对应图中绿色的部分,它是和机器强相关的编译后的汇编代码,它的执行效率是比较高的。

 

所以从这张图我们可以看到,一个Java应用从启动到运行到性能的峰值,中间还是会经过一个比较长的时间,包括虚拟机初始化、应用初始化、应用预热等等过程。这就是Java应用/Java Web应用启动比较耗时的原因。

 

另外一个问题是,为什么Java应用写一个比较简单的逻辑,最终的占用内存会比较高呢?这个的原因从图中也可以看到,程序什么都不执行,就会加载一个虚拟机,它也会有一定的内存大小。如果我们用一些工具,比如NMT工具,我们可以打印一下我们的应用,也可以看到GC本身占用的内存,它们都会有一定的内存。

 

另外,也和解释执行编译的过程有关。比如C/C++语言,会在执行之前做编译,编译的过程就有优化。而Java程序它是解释执行,它在解释的过程中会把我们的代码全部逐步加载到内存中,因为它不知道哪一块代码需要,哪一块不需要,所以实际加载的代码会比实际要执行的代码要多很多。这个就是应用在运行过程中的额外的内存开销。


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

相关文章
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
574 0
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
378 4
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
611 1
|
负载均衡 应用服务中间件 Apache
Nginx与Apache的终极对决:揭秘Web服务器界的“速度与激情”!你不可不知的性能霸主如何颠覆传统,震撼互联网的根基!
【8月更文挑战第13天】互联网技术发展中,Web服务器至关重要,Nginx与Apache是最广泛使用的两种。Apache历史悠久,但Nginx以轻量级和高性能脱颖而出。Nginx采用事件驱动架构,高效处理大量并发连接,而Apache使用进程驱动,高并发下资源消耗大。以餐厅为例,Nginx像大堂经理同时处理多个顾客需求,远比Apache为每位顾客分配服务员更高效。性能测试显示Nginx处理能力远超Apache。此外,Nginx配置简洁灵活,尤其在负载均衡方面表现突出。尽管Apache适合动态内容处理,但在快速变化的互联网环境中,Nginx因其独特优势成为许多开发者和企业的首选。
436 7
|
Kubernetes 安全 Serverless
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
308 6
|
开发者 前端开发 Apache
Apache Wicket Ajax揭秘:轻松几步,让你的Web应用告别“呆板”,焕发新生!
【8月更文挑战第31天】随着互联网技术的发展,Web应用的交互性成为评价网站成功的关键指标。Apache Wicket作为一款卓越的Java Web框架,不仅具备强大的组件化开发能力,还内置了对Ajax技术的支持,使开发者能轻松提升Web应用的交互体验。通过简单的代码示例展示了如何在不刷新页面的情况下异步更新页面元素,极大提升了用户体验。Wicket提供了多种Ajax组件和行为,如AjaxFallbackLink、AjaxButton等,满足不同场景需求,并支持自定义Ajax行为,帮助开发者实现复杂交互效果。合理运用Wicket的Ajax功能,可显著增强网站竞争力。
419 1
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
385 3
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
362 0
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。

推荐镜像

更多