首页 > 编程语言 >云原生时代的Java

云原生时代的Java

时间:2023-05-28 12:12:35浏览次数:72  
标签:原生 时代 Java 编译 AOT 镜像 Leyden

 Java最大的地基(护城河)是其极其强大的软件生态以及极其庞大的使用者人群。

在云原生的时代下,Java的统治地位不仅没有到什么坚不可摧,无后顾之忧的程度,说Java目前处于危机四伏的地位都不为过。最根本的原因是,目前随着云原生时代的到来,有一些以前植入Java语言的基因之中的,很多的假设前提,其实逐渐受到了争议,以及被动摇。

Java的slogan:“一处编写,到处运行”。在服务端编程领域来说,总体上是面向大规模长时间运行的服务端程序而设计的。 这一假设,影响了很多语言和类库的特征。

譬如,Java 总体上是面向大规模、长时间的服务端应用而设计的,严(luō)谨(suō)的语法利于约束所有人写出较一致的代码;静态类型动态链接的语言结构,利于多人协作开发,让软件触及更大规模;即时编译器、性能制导优化、垃圾收集子系统等 Java 最具代表性的技术特征,都是为了便于长时间运行的程序能享受到硬件规模发展的红利。

云原生时代Java的变革

Leyden

含义:莱顿(荷兰都市名)。

是Spring和GraavlVM合作成立的项目,解决了Java启动慢,占用内存大,镜像体积大的问题;但是原生(提前)编译产生了系统的吞吐量低延迟高的问题。由此成立了以下这个项目。

为什么系统的吞吐量低延迟高

Leyden是Spring和GraalVM合作的项目,旨在通过使用GraalVM的即时(JIT)编译器和AOT(提前)编译器来改善Java应用程序的启动时间、内存占用和镜像体积等问题。

GraalVM是一种高性能的Java虚拟机,它提供了两种不同的编译模式:即时编译(JIT)和AOT编译。

即时编译(JIT)是指在运行时将Java字节码编译为本地机器代码。它可以通过分析运行时的程序行为来优化代码执行,从而提供较高的吞吐量和较低的延迟。这种编译方式适用于长时间运行的应用程序,因为它可以根据实际运行情况进行动态优化。

AOT(提前)编译是指在构建或部署时将Java字节码预先编译为本地机器代码。这样做可以提高应用程序的启动速度、减少内存占用和镜像体积。然而,AOT编译可能会导致一些性能损失,因为它无法根据实际运行情况进行动态优化。

因此,Leyden项目使用AOT编译来改善Java应用程序的启动时间、内存占用和镜像体积等问题。然而,AOT编译的一个缺点是它无法像即时编译那样根据实际运行情况进行优化,这可能导致系统的吞吐量低和延迟高的问题。

虽然Leyden可以提供更快的启动时间和更小的镜像体积,但在某些情况下,它可能无法提供与即时编译相同的性能水平。因此,在选择使用Leyden或AOT编译时,需要权衡考虑应用程序的性能需求和启动时间需求。

Valhalla

无论使用什么语言,最终程序跑起来时对于底层硬件来说就两样东西:1. 生成送到CPU流水线上的指令流, 2. 在程序中,要被CPU指令流运算的数据。所以有一个说法叫 程序 = 代码 + 数据。

Loom

虚拟线程

与JMM和 Java多线程模型冲突(IO密集型就浪费资源了;CPU密集型就不会了,一个CPU核心可以很好吃满一整条线程)

一条Java线程(1MB栈内存,2-16KB的metadata)

结构化并发(概念比较新,2016年的)

是指程序的并发行为会与代码的结构对齐。“Code like sync,Work like async”正是 Loom 简化并发编程的核心理念。

 

Portola

JDK镜像瘦身

 

参考:云原生时代的Java

标签:原生,时代,Java,编译,AOT,镜像,Leyden
From: https://www.cnblogs.com/road2master/p/17438053.html

相关文章

  • 阅读《java并发编程实战》第十章
    例1:简单的加锁顺序导致的死锁:publicclassLeftRightDeadlock{privatefinalObjectleft=newObject();privatefinalObjectright=newObject();publicvoidleftRight(){synchronized(left){synchronized(right){......
  • Java:Jenv多版本管理工具(自由切换Java版本)
    文档https://www.jenv.be/https://github.com/jenv/jenv安装gitclonehttps://github.com/jenv/jenv.git~/.jenv编辑配置文件vim~/.bash_profile写入环境变量#jenvexportPATH="$HOME/.jenv/bin:$PATH"eval"$(jenvinit-)"#重启shellexec$SHELL-l......
  • 优先级队列的实现详解( Java 实现)
    前言优先级队列是在队列的基础上,每个元素都带有一个优先级,可以实现按照优先级高低进行存储和访问。Java提供了许多实现优先级队列的方法,例如使用堆来实现。在本篇博客中,我将介绍Java实现优先级队列实现的具体方法,以及如何使用它来解决实际问题。一、优先级队列的概念优先级队列......
  • java XML字符串和bean实体类互转
    pom引入依赖<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.13.1</version></dependency>实体类p......
  • 用Java语言springboot框架开发工艺管理系统
    技术架构技术框架:SpringBoot2.0.0+Mybatis1.3.2+Shiro+jpa+lombok+Vue2+Mysql5.7+redis+nodejs16运行环境:jdk8+IntelliJIDEA+maven+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,切换至prod,执行package,完成后就会在根目录里生成一个target目录,......
  • Java语言实现的springBoot汽车销售管理系统vue前端
    技术架构技术框架:springboot+mybatis+Mysql5.7+vue2+npm+node运行环境:jdk8+IntelliJIDEA+maven+宝塔面板宝塔部署教程解析一个域名,使用vscode打开front目录,修改/config/prod.env.js文件里的BASE_API字段为解析好的线上域名,执行npmrunbuild:prod打包出......
  • java 面试题目
    1:子类和父类的实例变量和方法有什么区别?2:重载和覆盖的区别,返回类型不同,可以重载吗?为什么?底层如何实现的?3:抽象类与接口的区别4:悲观锁和乐观锁5:线程安全的解决方法有哪些?读写锁6:hashcode和equals?7:java泛型8:ThreadLocal,Concurrent下面的包,原理?9:AtomicInteger原理是什......
  • 用Java语言和Springboot框架实现宿舍管理系统
    技术架构技术框架:SpringBoot+SpringMVC+MyBatis+Layui+Mysql5.7+Axios+Echarts+POI运行环境:jdk8+IntelliJIDEA+maven+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件......
  • java面试 关于红黑树
    红黑树(Red-BlackTree):是一种自平衡的二叉搜索树,它在实际的软件开发中广泛应用。红黑树的特点是具有高效的插入、删除和查找操作,并且保持树的平衡,以保证这些操作的时间复杂度为O(logn)。红黑树与AVL树有什么区别?红黑树和AVL树都是自平衡的二叉搜索树,但它们在维护平衡方......
  • 阅读《java并发编程实战》第五章
    阅读《java并发编程实战》第五章Semaphore的应用举例Semaphore的应用举例:实现一个固定大小的Set。当容器满了之后,无法add,线程阻塞。publicclassBoundedHashSet{//invariant:sizeofSetalwayslessthanorequaltogivensizeprivatefinalSet<Integer>s......