GraalVM

文章目录

  • 1、什么是GraalVM
  • 2、GraalVM的两种模式
    • 1_JIT模式
    • 2_AOT模式
    • 3_总结
  • 3、应用场景
    • 1_SpringBoot搭建GraalVM应用
    • 2_函数计算
    • 3_Serverless应用
  • 4、参数优化和故障诊断
    • 1_内存快照文件的获取
    • 2_运行时数据的获取

1、什么是GraalVM

GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。

GraalVM的官方网址:https://www.graalvm.org/

官方标语:Build faster, smaller, leaner applications。

更低的CPU、内存使用率:

在这里插入图片描述

在这里插入图片描述

官方标语:Build faster, smaller, leaner applications。

  • 更低的CPU、内存使用率
  • 更快的启动速度,无需预热即可获得最好的性能
  • 更好的安全性、更小的可执行文件
  • 支持多种框架Spring Boot、Micronaut、Helidon 和 Quarkus。
  • 多家云平台支持。
  • 通过Truffle框架运行JS、Python、Ruby等其他语言。

GraalVM分为社区版(Community Edition)和企业版(Enterprise Edition)。企业版相比较社区版,在性能上有更多的优化。

特性描述社区版企业版
收费是否收费免费收费
G1 垃圾回收器使用G1垃圾回收器优化垃圾回收性能×
Profile Guided Optimization(PGO)运行过程中收集动态数据,进一步优化本地镜像的性能×
高级优化特性更多优化技术,降低内存和垃圾回收的开销×
高级优化参数更多的高级优化参数可以设置×

linux可以使用如下命令查看系统架构,根据架构在https://www.graalvm.org/downloads/ 中下载社区版的GraalVM:

arch
  • 注意:安装方式和正常的JDK相同。

2、GraalVM的两种模式

  • JIT( Just-In-Time )模式 ,即时编译模式。也叫作 Java HotSpot VM 模式。
  • AOT(Ahead-Of-Time)模式 ,提前编译模式。也叫作 Native Image 模式。

1_JIT模式

JIT模式的处理方式与Oracle JDK类似,满足两个特点:

  • Write Once,Run Anywhere -> 一次编写,到处运行。
  • 预热之后,通过内置的Graal即时编译器优化热点代码,生成比Hotspot JIT更高性能的机器码。
    在这里插入图片描述

注意:

  • -XX:-UseJVMCICompiler参数可以关闭GraalVM中的Graal编译器。

特点:

  • 即时编译 (JIT): GraalVM作为JIT编译器在运行时编译字节码,从而获得高性能的优化。
  • 兼容性高: 完全兼容标准的Java应用程序,可以无缝替换标准的HotSpot VM。
  • 动态优化: 能根据运行时的实际情况不断优化代码,提高性能。
  • 多语言支持: 支持多种语言(如JavaScript、Ruby、Python等),可以在同一VM上运行和交互。

2_AOT模式

AOT(Ahead-Of-Time)模式 ,提前编译模式

AOT 编译器通过源代码,为特定平台创建可执行文件。比如,在Windows下编译完成之后,会生成exe文件。通过这种方式,达到启动之后获得最高性能的目的。但是不具备跨平台特性,不同平台使用需要单独编译。

这种模式生成的文件称之为Native Image本地镜像。

在这里插入图片描述

特点:

  • 提前编译 (AOT): 在编译时将Java字节码转换为本地机器代码,生成一个独立的可执行文件。
  • 启动速度快: 由于不需要JVM的启动和字节码解释,启动时间显著减少。
  • 低内存占用: 没有JVM运行时的开销,内存使用更少。
  • 不支持动态特性: 由于提前编译,动态类加载、反射等特性受限。

使用GraalVM AOT模式制作本地镜像并运行。

步骤:

1、安装Linux环境本地镜像制作需要的依赖库:

https://www.graalvm.org/latest/reference-manual/native-image/#prerequisites

2、使用 native-image 类名 制作本地镜像。

native-image ClassName

3、最后会生成本地可执行文件。

社区版的GraalVM使用本地镜像模式性能不如Hotspot JVM的JIT模式,但是企业版的性能相对会高很多。

在这里插入图片描述

3_总结

特性Java HotSpot VM 模式Native Image 模式
编译方式即时编译 (JIT)提前编译 (AOT)
启动时间较慢非常快
运行时性能高,动态优化固定优化
内存使用较高较低
兼容性高,支持所有Java特性较低,不完全支持动态类加载和反射
适用场景高性能、多语言混合应用快速启动、低内存占用的应用
多语言支持否(主要针对单语言编译)
调试和监控工具支持完整的JVM调试和监控工具支持有限的调试和监控支持

根据具体应用需求选择适合的模式,可以充分利用GraalVM的优势。对于高性能和需要动态优化的场景,JIT 模式是更好的选择;对于需要快速启动和低内存使用的场景,AOT 模式则更为合适。

3、应用场景

GraalVM的AOT模式虽然在启动速度、内存和CPU开销上非常有优势,但是使用这种技术会带来几个问题:

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

解决方案:

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

1_SpringBoot搭建GraalVM应用

需求:

SpringBoot3对GraalVM进行了完整的适配,所以编写GraalVM服务推荐使用SpringBoot3。

步骤:

  1. 使用 https://start.spring.io/spring 提供的在线生成器构建项目。
    在这里插入图片描述

  2. 编写业务代码

  3. 执行以下命令生成本地镜像:

    mvn -Pnative clean native:compile
    
  4. 运行本地镜像。
    在这里插入图片描述

什么场景下需要使用GraalVM呢?

  1. 对性能要求比较高的场景,可以选择使用收费的企业版提升性能。
  2. 公有云的部分服务是按照CPU和内存使用量进行计费的,使用GraalVM可以有效地降低费用。

2_函数计算

传统的系统架构中,服务器等基础设施的运维、安全、高可用等工作都需要企业自行完成,存在两个主要问题:

  1. 开销大,包括了人力的开销、机房建设的开销。
  2. 资源浪费,面对一些突发的流量冲击,比如秒杀等活动,必须提前规划好容量准备好大量的服务器,这些服务器在其他时候会处于闲置的状态,造成大量的浪费。

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
函数计算主要应用场景有如下几种:

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

在这里插入图片描述

使用:可以去阿里云官网搜索查看相关配置。

3_Serverless应用

函数计算的服务资源比较受限,比如AWS的Lambda服务一般无法支持超过15分钟的函数执行,所以云服务商提供了另外一套方案:基于容器的Serverless应用,无需手动配置K8s中的Pod、Service等内容,只需选择镜像就可自动生成应用服务。

同样,Serverless应用的计费标准中包含CPU和内存使用量,所以使用GraalVM AOT模式编译出来的本地镜像可以节省更多的成本。

服务分类交付模式弹性效率计费模式
函数计算函数毫秒级调用次数CPU内存使用量
Serverless应用镜像容器秒级CPU内存使用量

步骤:

1、在项目中编写Dockerfile文件。

2、使用服务器制作镜像,这一步会消耗大量的CPU和内存资源,同时GraalVM相关的镜像服务器在国外,建议使用阿里云的镜像服务器制作Docker镜像。

3、配置Serverless应用,选择容器镜像、CPU和内存。

4、绑定外网负载均衡并使用Postman进行测试。需要先创建弹性公网IP:

4、参数优化和故障诊断

由于GraalVM是一款独立的JDK,所以大部分HotSpot中的虚拟机参数都不适用。常用的参数参考:官方手册。

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

-XX:+PrintGC -XX:+VerboseGC 参数打印垃圾回收详细信息。

添加虚拟机参数:

在这里插入图片描述

打印出了垃圾回收的信息:

在这里插入图片描述

1_内存快照文件的获取

需求:

获得运行中的内存快照文件,使用MAT进行分析。

步骤:

1、编译程序时,添加 --enable-monitoring=heapdump,参数添加到pom文件的对应插件中。

<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><configuration><buildArgs><arg>--enable-monitoring=heapdump,jfr</arg></buildArgs></configuration>
</plugin>

2、运行中使用 kill -SIGUSR1 进程ID 命令,创建内存快照文件。

在这里插入图片描述

3、使用MAT分析内存快照文件。

在这里插入图片描述

2_运行时数据的获取

JDK Flight Recorder (JFR) 是一个内置于 JVM 中的工具,可以收集正在运行中的 Java 应用程序的诊断和分析数据,比如线程、异常等内容。GraalVM本地镜像也支持使用JFR生成运行时数据,导出的数据可以使用VisualVM分析。

步骤:
1、编译程序时,添加 --enable-monitoring=jfr,参数添加到pom文件的对应插件中。

<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><configuration><buildArgs><arg>--enable-monitoring=heapdump,jfr</arg></buildArgs></configuration>
</plugin>

2、运行程序,添加 -XX:StartFlightRecording=filename=recording.jfr,duration=10s参数。

在这里插入图片描述

3、使用VisualVM分析JFR记录文件。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十九)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 29 节&#xff09; P29《28.网络连接-第三方库axios》 要想使用第三方库axios&#xff0c;需要先安装ohpm&#xff0c;因为 axios…

认识String类

文章目录 String类字符串的遍历字符串的比较字符串的替换字符串的转换字符串的切割字符串的切片字符串的查找 总结 String类 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提 供的字符串系列函数完…

003-GeoGebra如何无缝嵌入到PPT里

GeoGebra无缝嵌入到PPT里真是一个头疼的问题&#xff0c;已成功解决&#xff0c;这里记录一下&#xff0c;希望可以帮助到更多人。 注意&#xff0c;后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦&#xff0c;我已经戒WPS了&#xff08;此处表示无奈&…

Mysql在Windows系统下安装以及配置

目录 一、下载Mysql 二、安装Mysql及环境配置 一、下载Mysql 1. 下载地址 官网:https://www.mysql.com&#xff0c;这里我选用的是Mysql8.0.37版本&#xff08;版本无所谓&#xff0c;随便下8.0.几都行&#xff09; 2.点击DOWNLOADS 然后&#xff0c;点击 MySQL Community…

YOLOv8目标检测在RK3588部署全过程

一&#xff0c;前言 这是一个关于从电脑安装深度学习环境到实现YOLOv8目标检测在RK3588上部署的全过程。 本人配置&#xff1a; 1&#xff0c;一台笔记本 2&#xff0c;一个香橙派5s 二&#xff0c;深度学习环境配置 2.1 安装anaconda 使用清华镜像源下载https://mirror…

如何借助物联网实现土壤监测与保护

如何借助物联网实现土壤监测与保护 高标准农田信息化是指利用现代信息技术&#xff0c;如物联网、大数据、云计算等&#xff0c;对农田进行数字化、智能化的管理&#xff0c;以提高农田的生产效率和可持续发展能力。其中&#xff0c;土壤监测与保护是农田信息化的重要内容之一…

力扣404周赛 T1/T2/T3 枚举/动态规划/数组/模拟

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 3200.三角形的最大高度【简单】 题目&#xff1a; 给你两个整数 red 和 b…

UE4_材质_水体的反射与折射制作_Ben教程

在这个教程中&#xff0c;将制作水的反射和折射&#xff0c;上个教程&#xff0c;我们主要讲了制作水涟漪&#xff08;水面波纹&#xff09;和水滴法线混合&#xff0c;水深计算&#xff0c;我们首先要谈的是反射和产生折射的问题。我们将所有从干扰从场景中分离出去&#xff0…

手机微信聊天记录删除了怎么恢复?揭秘3个技巧

在现代社交生活中&#xff0c;微信已经成为我们沟通和交流的重要工具。然而&#xff0c;不小心删除重要的微信聊天记录是很多人都会遇到的问题。这些被误删的记录可能包含了工作中的重要信息、与亲友的珍贵对话&#xff0c;甚至是重要的证据材料。 那么&#xff0c;当数据被删…

【ARM】MCU和SOC的区别

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解SOC芯片和MCU芯片的区别 2、 问题场景 用于了解SOC芯片和MCU芯片的区别&#xff0c;内部结构上的区别。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;无 2&#xff09;、电脑环境&#xff1a;无 3&am…

PLC边缘网关在实际应用中的作用-天拓四方

随着工业自动化的快速发展&#xff0c;PLC已成为工业自动化领域中不可或缺的核心设备。然而&#xff0c;随着工业物联网的兴起&#xff0c;PLC设备面临着数据集成、远程监控以及安全性等方面的挑战。为了解决这些问题&#xff0c;PLC边缘网关应运而生&#xff0c;它作为连接PLC…

企业im(即时通讯)作为安全专属的移动数字化平台的重要工具

企业IM即时通讯作为安全专属的移动数字化平台的重要工具&#xff0c;正在越来越多的企业中发挥着重要的作用。随着移动技术和数字化转型的发展&#xff0c;企业对于安全、高效的内部沟通和协作工具的需求也越来越迫切。本文将探讨企业IM即时通讯作为安全专属的移动数字化平台的…

FFmpeg 命令行 音视频格式转换

&#x1f4da;&#xff1a;FFmpeg 提供了丰富的命令行选项和功能&#xff0c;可以用来处理音视频文件、流媒体等&#xff0c;掌握命令行的使用&#xff0c;可以有效提高工作效率。 目录 一、视频转换和格式转换 &#x1f535; 将视频文件转换为另一种格式 &#x1f535; 指定…

电脑免费压缩软件app哪个好?Top15压缩软件良心测评,图文详解!

你是否在寻找一款能够帮助你释放电脑存储空间的免费压缩软件app呢&#xff1f;在当今数字化生活中&#xff0c;文件和媒体内容日益增多&#xff0c;而硬盘空间却总是显得不够用。优秀的压缩工具不仅能节省空间&#xff0c;还能提升系统效率&#xff0c;让你的电脑运行更加流畅。…

西南交通大学【算法分析与设计实验7】

机器人搬运货物 实验目的 &#xff08;1&#xff09;理解分支限界法的求解过程。 &#xff08;2&#xff09;分析分支限界法的时间复杂度&#xff0c;比较分支限界法算法与其他算法的时间效率差异。 &#xff08;3&#xff09;学会如何利用分支限界法求解具体问题&#xff…

网页报错dns_probe_possible 怎么办?——错误代码有效修复

当你在浏览网页时遇到dns_probe_possible 错误&#xff0c;这通常意味着你的浏览器无法解析域名系统&#xff08;DNS&#xff09;地址。这个问题可能是由多种原因引起的&#xff0c;包括网络配置问题、DNS服务问题、或是本地设备的问题。教大家几种修复网页报错dns_probe_possi…

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MPLS 原理概述

MPLS 概念 MPLS 是一种在 IP 骨干网上利用标签来指导数据报文高速转发的协议&#xff0c;由 IETF &#xff08;Internet Engineering Task Force&#xff0c;因特网工程服务组&#xff09;提出。相对于传统的 IP 路由方式&#xff0c;MPLS 提供了一种新的网络交换方式&#xf…

【热部署】✈️Springboot 项目的热部署实现方式

目录 &#x1f378;前言 &#x1f37b;一、热部署和手动重启 &#x1f37a;二、热部署的实现 2.1 手动启动热部署 2.2 自动检测热部署 2.3 关闭热部署 &#x1f49e;️三、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;书接上文&#xff0c;通过Springboot 中的 actu…

进程和计划任务

AUTHOR&#xff1a;闫小雨 TIME&#xff1a;2024-04-24 目录 一、进程管理 1.1、查看进程 1、ps 查看静态进程信息 2、top 查看动态进程信息 3、pgrep 查询进程信息 4、pstree 查询进程树 二、控制进程 1、前台进程 1、手工启动进程 2、调度启动进程 2、改变进程运行…