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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
简介: 带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(3)

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




image.png

任何技术都有两面性,静态编译也是一样。它虽然有很多优势,但也存在着一些不足。

 

它让动态特性使用起来比较麻烦,因为静态编译的过程中会有一个静态分析,它会通过上下文无关的指向性分析,从入口开始对程序进行分析,分析哪些代码是我们应该运行的,哪些代码是不应该运行的,把不应该运行的代码从最终的可执行文件中剔除掉。

 

如果它把某些代码误识别为不需要执行了,这些代码就不会包含在可执行文件里了。因此就会使运行过程出现问题。这些容易被误理解为不需要执行的代码,主要包括反射、动态代理、JNI等等。

 

那么为什么会把这些代码误认为是不需要执行的代码呢?如上图右侧所示,它是一个很简单的反射逻辑,通过一个变量className,也就是引用了一个类。在正常情况下,在运行过程中才知道这个变量是什么。而静态编译会在运行之前做编译,所以这个时候它无法知道className这个变量代表什么值,是哪个类的,这个类里的哪些方法会被反射调用。只有一些特殊场景它能知道,比如这个变量是final的。

 

解决这个问题的方法是,动态特性可以通过配置文件,把程序里的动态特性做一些标注。在静态编译的时候,它会把配置文件里相关的类编译进去。

 

但应用程序里有这么多类,我怎么知道哪些是动态特性要找出来的呢?GraalVM提供了native-image-agent的工具,也就是在静态编译之前,我们预执行一下,这样它就可以把应用程序中所有和动态特性的内容都扫描出来了,然后把它记录在配置文件里。等到静态编译的时候,它就会把相关的东西都包含进去,这样就解决了代码里面动态特性可能会被误识别的问题。 

 

image.png 

 

静态编译是一技术,是一方法,它可以解决一些问题。而GraalVM是静态编译的解决方案,提供了像静态编译器等的技术方案,让Java程序/Java Web程序能够很简单实现静态编译的效果。如果看过GraalVM相关的一些文档,就可以知道GraalVM是Oracle推出的基于Java开发的开源高性能多语言运行时平台。

 

那么它和静态编译又有什么关系呢?如上图所示,GraalVM依赖于OpenJDK的底层运行时,它在中间提供了一个静态的编译器。另外,它在上层提供了一些解释器的框架。这就会让各种语言通过GraalVM相关的解释器框架很容易开发一个解释器。然后我们的程序就可以通过解释器翻译成GraalVM编译器能够编译的内容运行。

image.png

上图会更明显一点,GraalVM的核心是中间GraalVM JIT的编译器,它能够提供静态编译的效果,让我们的程序像运行普通Java程序一样运行,同时也能支持其他多语言写的程序运行。




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

相关文章
|
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)。
|
1月前
|
Apache
web服务器(Apache)访问日志(access_log)详细解释
web服务器(Apache)访问日志(access_log)详细解释

推荐镜像

更多