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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
简介: 带你读《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

相关文章
|
1月前
|
Java 应用服务中间件 Apache
从零手写实现 apache Tomcat-01-入门介绍
创建简易Tomcat涉及理解其作为Java服务器的角色,建立HTTP服务器,实现Servlet接口处理动态和静态内容,以及启动和关闭服务器。项目mini-cat是一个简化版Tomcat实现,支持Servlet、静态网页和基础功能。可通过maven添加依赖并运行测试类快速体验。开源项目位于[GitHub](https://github.com/houbb/minicat)。
|
6天前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
35 7
|
4天前
|
存储 Apache 文件存储
在Apache环境下为Web网站增设访问控制:实战指南
在Apache服务器上保护网站资源涉及启用访问控制模块(`mod_authz_core`和`mod_auth_basic`),在`.htaccess`或`httpd.conf`中设定权限,如限制对特定目录的访问。创建`.htpasswd`文件存储用户名和密码,并使用`htpasswd`工具管理用户。完成配置后重启Apache服务,访问受限目录时需提供有效的用户名和密码。对于高安全性需求,可考虑更复杂的认证方法。【6月更文挑战第20天】
65 4
|
19天前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
18 1
|
1月前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
19天前
|
XML Java 应用服务中间件
在Web Application中集成CAS登录模块
在Web Application中集成CAS登录模块
16 0
|
21天前
|
Apache Windows
windows 一键安装apache服务器 windows傻瓜式安装apache2 web服务器管理软件
windows 一键安装apache服务器 windows傻瓜式安装apache2 web服务器管理软件
30 0
|
29天前
|
前端开发 图形学
Could you provide some examples of when Canvas or SVG would be the better choice for a web application?
Could you provide some examples of when Canvas or SVG would be the better choice for a web application
|
30天前
|
运维 Cloud Native Apache
云计算新宠:探索Apache Doris的云原生策略
云计算新宠:探索Apache Doris的云原生策略
|
1月前
|
XML 安全 Java
从零手写实现 apache Tomcat-02-web.xml 入门详细介绍
`web.xml`是Java Web应用的核心配置文件,描述应用工作方式。它包含Servlet、Filter和Listener的定义。例如,示例展示了如何配置名为`my`的Servlet处理`/my`请求,`LoggingFilter`拦截所有请求,以及`MyServletContextAttrListener`监听应用事件。`web.xml`是服务器理解应用结构与行为的指南。迷你版Tomcat实现——mini-cat(开源:https://github.com/houbb/minicat)。

推荐镜像

更多