GraalVM运行模式和企业级应用

文章目录

  • GraalVM运行模式
    • JIT模式
    • AOT模式
  • GraalVM的问题和解决方案
  • GraalVM企业级应用
    • 传统架构的问题
    • Serverless架构
    • 函数计算
    • Serverless应用场景
    • Serverless应用
  • GraalVM内存参数

GraalVM运行模式

JIT模式

  • JIT( Just-In-Time )模式 ,即时编译模式
    JIT模式的处理方式满足两个特点:
    Write Once,Run Anywhere -> 一次编写,到处运行。
    ✓ 预热之后,通过内置的Graal即时编译器优化热点代码,生成比Hotspot JIT更高性能的机器码。

  • GraalVM的JIT编译器在编译过程中使用了即时优化技术,包括方法内联、循环优化、逃逸分析等。这些优化技术可以提高代码的执行效率,并且针对不同的应用场景进行了优化,例如对于大型企业应用、嵌入式系统或数据密集型应用等。
    在这里插入图片描述

AOT模式

  • AOT(Ahead-Of-Time)模式 ,提前编译模式
  • 在AOT模式下,GraalVM将Java字节码编译成本地机器代码,并生成一个可执行文件,可以直接在目标平台上运行,而无需Java虚拟机(JVM)。这使得Java应用程序可以像传统的本地应用程序一样启动和执行,而无需依赖JVM。但是不具备跨平台特性,不同平台使用需要单独编译。这种模式生成的文件称之为Native Image本地镜像。
  • GraalVM的AOT模式为Java应用程序提供了更快的启动时间和更低的内存消耗,同时仍然保持了良好的性能和跨平台的特性。这使得Java应用程序可以更好地适应云原生、嵌入式和边缘计算等场景的需求。
    在这里插入图片描述

GraalVM的问题和解决方案

  • GraalVM的AOT模式虽然在启动速度、内存和CPU开销上非常有优势,但是使用这种技术会带来几个问题:
  1. 跨平台问题,在不同平台下运行需要编译多次,编译平台的依赖库等环境要与运行平台保持一致。
  2. 使用框架之后,编译本地镜像的时间比较长,同时也需要消耗大量的CPU和内存。
  3. AOT 编译器在编译时,需要知道运行时所有可访问的所有类。但是Java中有一些技术在运行时创建类,例如反射、动态代理等。这些技术在很多框架比如Spring中大量使用,所以框架需要对AOT编译器进行适配解决类似的问题。

  • 解决方案:
  1. 使用公有云的Docker等容器化平台进行在线编译,确保编译环境和运行环境是一致的,同时解决编译资源问题。
  2. 使用SpringBoot3等整合GraalVM AOT模式的框架版本

GraalVM企业级应用

传统架构的问题

  • 传统的系统架构中,服务器等基础设施的运维、安全、高可用等工作都需要企业自行完成,存在两个主要问题:
  1. 开销大,包括人力的开销、机房建设的开销
  2. 资源浪费,面对一些突发的流量冲击,比如秒杀,必须提前规划好容量准备好大量的服务器,这些服务器在其他时候会处于闲置的状态,造成大量的浪费
    在这里插入图片描述

Serverless架构

  • 随着虚拟化技术、云原生技术的愈发成熟,云服务商提供了一套称为Serverless无服务器化的架构。企业无需进行服务器的任何配置和部署,完全由云服务商提供。比较典型的有亚马逊AWS、阿里云等。
    在这里插入图片描述

函数计算

  • Serverless架构中第一种常见的服务是函数计算(Function as a Service),将一个应用拆分成多个函数,每个函数会以事件驱动的方式触发。典型代表有AWS的Lambda、阿里云的FC。
    在这里插入图片描述

Serverless应用场景

  • 函数计算主要应用场景有如下几种:
  1. 小程序、API服务中的接口,此类接口的调用频率不高,使用常规的服务器架构容易产生资源浪费,使用Serverless可以实现按需付费降低成本,同时支持自动伸缩能应对流量的突发情况。
  2. 大规模任务的处理,比如音视频文件转码、审核等,可以利用事件机制当文件上传后,自动触发对应的任务。函数计算的计费标准中包含CPU和内存使用量,使用GraalVM AOT模式编译本地镜像可以节省成本。
    在这里插入图片描述

Serverless应用

  • 函数计算的服务资源比较受限,比如AWS的Lambda服务一般无法支持超过15分钟的函数执行,所以云服务商提供另外一套方案:基于容器的Serverless应用,无需手动配置K8s中的Pod、Service等内容,只需选择镜像就可自动生成应用服务。
  • 同样,Serverless应用的计费标准中包含CPU和内存使用量,所以使用GraalVM AOT模式编译出来的本地镜像可以节省更多的成本。
    在这里插入图片描述

GraalVM内存参数

  • 由于GraalVM是一款独立的JDK,大部分HotSpot中的虚拟机参数都不适用。
    ⚫ 社区版只能使用串行垃圾回收器(Serial GC),使用串行垃圾回收器的默认最大 Java 堆大小会设置为物理内存大小的 80%,调整方式为使用 -Xmx最大堆大小。如果希望在编译期就指定该大小,可以在编译时添加参数-R:MaxHeapSize=最大堆大小
    ⚫ G1垃圾回收器只能在企业版中使用,开启方式为添加–gc=G1参数,有效降低垃圾回收的延迟。
    ⚫ 另外提供一个Epsilon GC,开启方式:–gc=epsilon ,它不会产生任何的垃圾回收行为所以没有额外的内存、CPU开销。如果在公有云上运行的程序生命周期短暂不产生大量的对象,可以使用该垃圾回收器,以节省最大的资源。
  • -XX:+PrintGC -XX:+VerboseGC 参数打印垃圾回收详细信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重置gitlab root密码

gitlab-rails console -e production user User.where(id: 1).first user User.where(name: "root").first #输入重置密码命令 user.password"admin123!" #再次确认密码 user.password_confirmation"admin123!" #输入保存命令&am…

单例(Singleton)设计模式总结

1. 设计模式概述: 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。 就像是经典的棋谱,不同的棋局,我们用不同的棋谱。"套路"经典的设计模式一共有…

Ruby 之交租阶段信息生成

题目 我看了一下,这个题目应该不是什么机密,所以先放上来了。大概意思是根据合同信息生成交租阶段信息。 解答 要求是要使用 Ruby 生成交租阶段信息,由于时间比较仓促,变量名那些就用得随意了些。要点主要有下面这些&#xff1a…

【介绍什么是DDOS】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

Qt 的发展历史、现状与启示

Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发,他们在1994年创立 Trolltech 公司(奇趣科技)正式经营软件业务。Qt 的第一个公众预览版于1995年面世,之后在2008年被诺基亚收购;2011年到201…

【C++】编程规范之内存规则

在高质量编程中,内存管理是一个至关重要的方面。主要有以下原则: 内存分配后需要检查是否成功:内存分配可能会失败,特别是在内存紧张的情况下。因此,在分配内存后,应该检查分配是否成功。 int* ptr new …

【ZZULIOJ】1030: 判断直角三角形(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入三个正整数,判断用这三个整数做边长是否能构成一个直角三角形。 输入 输入三个正整数。 输出 能否构成直角三角形。如能输出:yes.若不能,输出&#xff1a…

java操作mongodb详解

前言 一切操作都应该以官方文档为准,mongodb官网文档地址: https://www.mongodb.com/docs/ ,网上关于java操作mongodb的文章偏少,而且有些乱。这篇文章是在项目中使用mongodb后的一些总结,希望能帮到大家。 1.创建mon…

(译) 理解 Elixir 中的宏 Macro, 第四部分:深入化

Elixir Macros 系列文章译文 [1] (译) Understanding Elixir Macros, Part 1 Basics[2] (译) Understanding Elixir Macros, Part 2 - Macro Theory[3] (译) Understanding Elixir Macros, Part 3 - Getting into the AST[4] (译) Understanding Elixir Macros, Part 4 - Divin…

如何开启MySQL的binlog日志

1.启用远程连接: 如果你想要允许远程主机连接到MySQL服务器,需要进行以下步骤: 确保MySQL服务器的防火墙允许远程连接的流量通过。在MySQL服务器上,编辑MySQL配置文件(一般是my.cnf),找到bind-…

Go——函数

一. 函数定义 1.1 特点 无需声明原型支持不定变参支持多返回值支持命名返回参数支持匿名函数和闭包函数也是一种类型,一种函数可以赋值给变量不支持嵌套,一个包不能有两个名字一样的函数不支持重载不支持默认参数 1.2 函数声明 函数声明包含一个函数名&…

备战蓝桥杯---DP刷题2

1.树形DP: 即问那几个点在树的直径上,类似ROAD那题,我们先求一下每一个子树根的子树的最大值与次大值用d1,d2表示,直径就是d1d2的最大值,那么我们如何判断是否在最大路径上,其实就是看一下从某一点出发的所…

还得是抖音,字节推出竖屏视频理解数据集,入选CVPR2024

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 短视频在当下社交媒体逐渐成为主导的视频格式。传统视频处理技术和研究一般都专注于横屏视频…

58商铺全新UI试客试用平台网站php源码

探索未来商铺新纪元,58商铺全新UI试客试用平台网站PHP源码完整版震撼来袭! 在这个数字化飞速发展的时代,58商铺一直致力于为商家和消费者打造更加便捷、高效的交易平台。今天,我们荣幸地推出全新UI试客试用平台网站PHP源码完整版…

计算模型 观察分析 杂记

计算模式 计算模式通常指的:用特定计算资源完成特定计算任务所采用的计算策略。计算资源主要指运算器和存储器,当然若其他设备影响因素较大的情况下也考虑控制器,输入输出设备;计算任务多种多样,可以是简单的加减乘除&…

动态规划基础

动态规划 1、动态规划的概念 简称DP,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。常常适用于有重叠子问题和最优子结构性质的问题。 简单来说,就是给定一个问题,把它拆成一个个子问题,查到子问题可以直接解决。然后把子问题答案保存起来,以减少重复计算…

Flink SQL系列之:解析Debezium数据格式时间字段常用的函数

Flink SQL系列之:解析Debezium数据格式时间字段常用的函数 一、FROM_UNIXTIME二、DATE_FORMAT三、TO_DATE四、CAST五、TO_TIMESTAMP_LTZ六、CONVERT_TZ七、FROM_UNIXTIME八、TO_TIMESTAMP九、常见用法案例1.案例一2.案例二3.案例三4.案例四5.案例五

C/C++ 项目:分别用精密星历和广播星历计算卫星坐标

文章目录 Part.I IntroductionChap.I rinex.hChap.II gmain_body.h Part.II 使用方法扩展阅读 Part.I Introduction 本文将介绍一个小项目的使用方法,此项目可用精密星历和广播星历计算卫星位置,并将两者结果做差,输出至文件。 其实 『分别…

SWM341系列应用(上位机应用)

SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象:客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局,反馈在模拟运行时(PC端)流畅,在Demo平台(设备端)运行卡顿。 分析及解决&…

【fastadmin】脚本模式下,日志钩子函数执行出现死循环,导致内存溢出奔溃

问题出现原因是想对项目中error级别的日志,接入钉钉告警,方便查看 于是使用钩子方法,日志写入完成后,自动调用自定义的告警方法中 1、在application/tags.php 中添加log_write_done > [app\\common\\behavior\\Common, ],2、在…