首页 > 编程语言 >GraalVM(云原生时代的Java)和IoT在边缘侧落地与实践

GraalVM(云原生时代的Java)和IoT在边缘侧落地与实践

时间:2023-04-25 09:22:05浏览次数:31  
标签:netty Java KB IoT io GraalVM native

环顾四周,皆是对手!

  • 云时代的掉队者,由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心,在越来越流行的边缘计算、IoT方向上也是难觅踪影;
  • Java语言在业务服务开发中孤独求败,但在系统级应用领域几乎是C、C++、搅局者Go、黑天鹅Rust的天下;
  • 移动应用、敏捷应用的追随者,移动应用中Android逐步去Java,前端又是JS的世界,敏捷开发方面前有Ruby、Python后有NodeJS;

多语言比拼.png

此时众多的Javaer会不经意发问:学Java还有未来么?

你可以嫌弃Java, 但是可以永远相信JVM! 在云原生如日中天、Serverless日渐成熟、新语言百花齐放的当下,跨语言、Native支持、高性能低资源占用的技术必定是其璀璨的明珠,而GraalVM正是这样一个承载了JVM未来,将Java带入下一波技术的弄潮儿。

GraalVM - 云原生时代的Java

“一次编写,到处运行“是Java语言的特性,这一重要特性依靠的是JVM虚拟机

在讨论GraalVM之前,我们先聊下Java代码是怎么运行的?

从硬件视角来看,Java字节码无法直接执行。因此,Java虚拟机需要将字节码翻译成机器码。

代码如何在JVM运行?.jpg

从虚拟机视角来看,执行Java代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。Java 虚拟机同样也在内存中划分出堆和栈来存储运行时数据。

不同的是,Java 虚拟机会将栈细分为面向 Java 方法的 Java 方法栈,面向本地方法(用 C++ 写的 native 方法)的本地方法栈,以及存放各个线程执行位置的 PC 寄存器。

Java虚拟机-软件层面.png

在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布。

当退出当前执行的方法时,不管是正常返回还是异常返回,Java 虚拟机均会弹出当前线程的当前栈帧,并将之舍弃。

GraalVM带来哪些神奇的黑魔法

标签:netty,Java,KB,IoT,io,GraalVM,native
From: https://www.cnblogs.com/sanshengshui/p/17351623.html

相关文章

  • JavaScript 正则表达式
    基本使用 //定义正则表达式 constreg=/^\d{4}-\d{1,2}-\d{1,2}$/; conststr="2020-11-11"; //验证字符串是否符合规则 reg.test(str);元字符^表示开始部分等于xxx$表示结束部分等于xxx[]表示字符串中存在中括号中定义的字符,可以使用连字符,如a-z表示可以匹......
  • Java基础
    Java基础Java基础篇JDK和JRE的区别是什么?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。总结:JDK包含了JRE,同时还包含了编译java源码的编译器......
  • JAVA运算符详解
    JAVA运算字符详解赋值运算符符号作用说明=赋值inta=10;将10赋值给变量a+=加后赋值a+=b;将a+b的值给a-=减后赋值a-=b;将a-b的值给a*=乘后赋值a*=b;将a*b的值给a/=除后赋值a/=b;将a/b的值给a%=取余后赋值a%=b;将a%b的余数......
  • JavaSE笔记——02
    Java流程控制仅仅个人学习记录,不涉及任何商用1.用户交互Scanner从JDK1.5版本之后,专门提供了输入数据类Scanner,此类数据不但可以输入数据,而且也能方便地验证输入的数据。->1.Scanner类概述​ Scanner类可以接收任意的输入流。Scanner类放在java.util包中,其常用的方法......
  • JavaSE笔记——03
    Java方法仅仅个人学习历程记录,不涉及任何商用方法1.方法的定义:一段用来完成特定功能的代码片段,类似于其他语言的函数。2.方法的作用:用于定义该类或该类的实例的行为特征和功能实现3.区别:​ 面向过程中,函数是最基本的单位,整个程序都是由一个个程序组成的​ 面向对象......
  • Java文件操作必备技能,10个小技巧让你快速掌握!
    前言  在我们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中,我将给你们介绍10个实用的文件操作技巧。使用try-with-resources语句处理文件IO流,确保在使用完毕后自动关闭流。使用java.n......
  • JavaSE学习笔记——01
    Java笔记基础仅仅学习,不涉及任何商用1.注释单行注释:以"//"开头多行注释:以"/"开头,以"/"结尾文档注释:以"/**"开头,"*/"结尾。注释中包含一些说明性的文字及一些JavaDoc标签。publicclassHello{publicstaticvoidmain(String[]args){//单行注释......
  • Java并发(三)----创建线程的三种方式及查看进程线程
    一、直接使用Thread//创建线程对象Threadt=newThread(){  publicvoidrun(){    //要执行的任务 }};//启动线程t.start();例如://构造方法的参数是给线程指定名字,推荐Threadt1=newThread("t1"){  @Override  //run方法内......
  • docker-compose一键部署java开源项目
    这一年干的很多事都是为了降低我的开源项目消息推送平台austin使用门槛。如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8Kstars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。开源项目消息推送平台austin仓库地址:消息推送平台......
  • java排序算法2(简单选择排序、堆排序)
    简单选择排序---不稳定选择排序在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后以此类推,直到所有元素均排序完毕。for(inti=0;i<arr.length;i++){//记录最小值下标位置intmin=i;for(intj=i+1;j<arr.leng......