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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 带你读《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

相关文章
|
Ubuntu Java 应用服务中间件
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
229 0
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
154 4
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
209 0
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
393 1
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
334 0
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
248 0
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
201 0
|
前端开发 JavaScript 开发者
革命性的飞跃:Apache Wicket新特性大揭秘,让你的Web开发之旅如虎添翼!
【8月更文挑战第31天】Apache Wicket作为一个成熟的Java Web框架,持续进化以适应现代Web开发需求。本文介绍Wicket的最新特性,包括响应式布局支持、组件化与模块化开发、异步请求处理、增强的表形处理以及与现代JavaScript框架的集成。通过具体代码示例展示如何利用这些特性构建高效、灵活且用户友好的Web应用程序。
226 0
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
280 0
|
开发者 前端开发 Apache
Apache Wicket Ajax揭秘:轻松几步,让你的Web应用告别“呆板”,焕发新生!
【8月更文挑战第31天】随着互联网技术的发展,Web应用的交互性成为评价网站成功的关键指标。Apache Wicket作为一款卓越的Java Web框架,不仅具备强大的组件化开发能力,还内置了对Ajax技术的支持,使开发者能轻松提升Web应用的交互体验。通过简单的代码示例展示了如何在不刷新页面的情况下异步更新页面元素,极大提升了用户体验。Wicket提供了多种Ajax组件和行为,如AjaxFallbackLink、AjaxButton等,满足不同场景需求,并支持自定义Ajax行为,帮助开发者实现复杂交互效果。合理运用Wicket的Ajax功能,可显著增强网站竞争力。
191 0

推荐镜像

更多