iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Valhalla Project项目介绍
  • 302
分享到

Java Valhalla Project项目介绍

2024-04-02 19:04:59 302人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录Valhalla项目的动机和原因Value Types 值类型Specialized Generics 专用泛型结论前言: 在本文中,我们将介绍Valhall

前言:

在本文中,我们将介绍Valhalla项目——它的历史原因、当前的开发状态,以及它发布后为日常Java开发人员带来了什么。

Valhalla项目的动机和原因

oracle的Java语言架构师Brian Goetz在一次演讲中说,Valhalla项目的主要动机之一是希望使Java语言和运行时适应现代硬件。当Java语言诞生时(大约25年前撰写本文时),获取内存和算术运算的成本大致相同。

如今,这种情况已经发生了变化,内存提取操作的成本是算术操作的200到1000倍。就语言设计而言,这意味着导致指针提取的间接操作会对整体性能产生不利影响。

由于应用程序中的大多数Java数据结构都是对象,因此我们可以将Java视为指针密集型语言(尽管我们通常不会直接看到或操作它们)。这种基于指针的对象实现用于启用对象标识,对象标识本身用于语言特性,如多态性、可变性和定。默认情况下,这些特性适用于每个对象,无论它们是否真的需要。

遵循导致指针的标识链和导致间接的指针链,间接存在性能缺陷,逻辑上的结论是删除那些不需要它们的数据结构。这就是值类型value types发挥作用的地方。

Value Types 值类型

值类型的概念是表示纯数据聚合。这会删除常规对象的功能。因此,我们有纯数据,没有身份。当然,这意味着我们也失去了使用对象标识可以实现的功能。因此,平等比较只能基于状态进行。因此,我们不能使用表示多态性,也不能使用不可变或不可为空的对象。

由于我们不再有对象标识,我们可以放弃指针,改变值类型的一般内存布局,而不是对象。让我们来比较一下类点和相应的值类型点之间的内存布局。

常规Point类的代码和相应的内存布局为:

final class Point {
  final int x;
  final int y;
}

另一方面,值类型Point的代码和相应的内存布局将是:

value class Point {
  int x;
  int y
}

这允许JVM将值类型展平为数组和对象,以及其他值类型。

在下图中,我们展示了在数组中使用Point类时间接的负面影响:

另一方面,这里我们看到值类型Point[]的相应内存结构:

它还使JVM能够在栈上传递值类型,而不必在堆上分配它们。最后,这意味着我们得到的数据聚合具有类似于Java原语的运行时行为,如intfloat

但与原语不同,值类型可以有方法和字段。我们还可以实现接口并将其用作泛型类型。

因此,我们可以从两个不同的角度来看值类型:

  • 更快的对象
  • 用户定义原语

作为额外的锦上添花,我们可以使用值类型作为泛型类型,而无需装箱。这直接将我们引向了另一个大型项目Valhalla的特性:专用泛型。

Specialized Generics 专用泛型

当我们想对语言原语进行泛化时,我们目前使用装箱类型,例如整数表示Integer或浮点表示Float。这种装箱创建了一个额外的间接层,从而首先破坏了使用原语提高性能的目的。

因此,我们在现有的框架和库中看到了许多针对基元类型的专门化,如IntStream<T>ToIntFunction<T>。这样做是为了保持使用原语的性能提高。

因此,专门化泛型是为了消除这些“黑客”的需求。相反,Java语言努力为基本上所有东西启用泛型类型:对象引用、原语、值类型,甚至可能是void

结论

我们初步了解了Valhalla项目将给Java语言带来的变化。其中两个主要目标是提高性能和减少泄漏的抽象。

性能增强通过展平对象图和移除间接来解决。这将导致更高效的内存布局和更少的分配和垃圾回收。

当用作泛型类型时,原语和对象具有更相似的行为,这是更好的抽象。

到此这篇关于Java Valhalla Project项目介绍的文章就介绍到这了,更多相关Java Valhalla Project内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Valhalla Project项目介绍

本文链接: https://www.lsjlt.com/news/166960.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Valhalla Project项目介绍
    目录Valhalla项目的动机和原因Value Types 值类型Specialized Generics 专用泛型结论前言: 在本文中,我们将介绍Valhall...
    99+
    2024-04-02
  • PHP简化开发项目介绍
    本篇内容介绍了“PHP简化开发项目介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0. CakePHP Development Frame...
    99+
    2023-06-17
  • Docker快速部署SpringBoot项目介绍
    1、安装 Docker 首先打开linux环境,输入以下命令进行安装: 安装 yum install docker 检查是否安装成功 docker --version #启动...
    99+
    2024-04-02
  • 工资管理系统项目介绍
    本文将详细介绍工资管理系统的功能、设计思路以及实现过程,为读者提供一个全面了解该系统的机会。 一、功能介绍工资管理系统是一个用于管理和处理公司员工工资的软件。它包括以下主要功能:员工信息管理:可以添加、修改和删除员工的信息,如姓名、职位、薪...
    99+
    2024-01-25
    工资管理系统 项目
  • ASP.NET MVC项目部署方式介绍
    目录一、直接用源代码部署1、新建网站2、配置添加网站3、浏览二、使用发布文件部署1、发布文件2、部署ASP.NET MVC编写的程序需要部署到IIS上面才能进行访问,部署方式分为两种...
    99+
    2024-04-02
  • 【项目实战】Kafka中Topic创建介绍
    一、Kafka介绍 Kafka是一种分布式流处理平台,它可以处理实时数据流,支持高吞吐量、低延迟的数据处理。 它通过Topic和Partition机制将消息存储在集群中,并支持高吞吐量的消息发布和订阅...
    99+
    2023-10-21
    kafka java 分布式
  • .NET 开源项目Polly的简单介绍
    目录Polly 介绍 故障处理策略示例 Polly 的七种策略 重试(Retry) 断路(Circuit-breaker) 超时(Timeout) 隔离(Bulkhead Isola...
    99+
    2024-04-02
  • 使用vue-cli创建vue项目介绍
    1、什么是vue-cli 是vue官方提供的脚手架工具。脚手架工具简单讲就是自动将项目需要的环境、依赖等信息都配置好。 2、全局安装vue-cli (1)检查npm 版本,建议安装到...
    99+
    2024-04-02
  • 全栈项目【尚医通】预约挂号系统项目介绍
    🐼个人主页:爪哇斗罗 🐼博主介绍:一名打工人 🐼签名:圣人之道,为而不争。 🐼一起交流,一起进步,一起互动。 ​ 目录 一.项目介绍 二.技术架构 2.1...
    99+
    2023-09-02
    java 开发语言
  • java项目依赖包选择具体实现类示例介绍
    目录正文1. 任务说明2.具体实现3. 扩展机制小结正文 最近遇到一个需求场景,开源的工具包,新增了一个高级特性,会依赖json序列化工具,来做一些特殊操作;但是,这个辅助功能并不是...
    99+
    2022-12-22
    java项目依赖包实现类 java 依赖包
  • express项目文件目录的说明与功能介绍
    这篇文章主要介绍“express项目文件目录的说明与功能介绍”,在日常操作中,相信很多人在express项目文件目录的说明与功能介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”express项目文件目录的说...
    99+
    2023-06-14
  • git如何查看项目?多种方法介绍
    随着软件开发的快速发展,版本控制已经成为必不可少的一项技能,Git 是目前最受欢迎的分布式版本控制系统之一。在使用 Git 进行版本控制时,应该如何查看项目呢?本文将为大家介绍 Git 的相关内容,让读者更方便地管理代码。一、Git 基本命...
    99+
    2023-10-22
  • 详细介绍如何在GitLab上克隆项目
    随着软件代码的不断增长,版本控制变得越来越重要。 Git是一个广泛使用的版本控制工具,而GitLab是一个基于Git的web平台,用于管理Git项目。GitLab作为一个集成式的代码托管平台,不仅支持Git的基本功能,还提供了代码编译、代码...
    99+
    2023-10-22
  • 详细介绍如何从Github上下载项目
    随着开源软件的流行,Github已成为开源代码的重要平台之一。越来越多的开发者选择在Github上发布自己的代码。但是,对于一些新手来说,如何在Github上下载项目可能会是一件棘手的事情。在本文中,我们将详细介绍如何从Github上下载项...
    99+
    2023-10-22
  • 如何对Web Setup Project项目进行说明
    这篇文章给大家介绍如何对Web Setup Project项目进行说明,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随着时代的进步科技的发展Web Setup Project也快速的提升与升级,下面我就对升级前和升级后...
    99+
    2023-06-17
  • JAVA-JDK1.8介绍
            Java JDK 1.8-Java Development Kit的第8个主要版本。Java JDK 1.8是Java编程语言的一个重要版本,引入了一些新的功能和改进,同时也修复了几项bug。在本博客中,我将详细介绍Java...
    99+
    2023-09-01
    java 开发语言
  • Springboot中项目的属性配置的详细介绍
    目录正文1. 少量配置信息的情形2. 多个配置信息的情形3. 指定项目配置文件4. 总结正文 我们知道,在项目中,很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会...
    99+
    2024-04-02
  • Maven环境安装配置和新建项目介绍
    目录1 Maven是什么?2,环境搭建2.1 安装JDK2.2 下载并安装maven2.3 配置环境变量2.4 验证maven是否已经安装2.5 maven的本地仓库的配置3 ecl...
    99+
    2024-04-02
  • spring boot项目application.properties文件存放及使用介绍
    一、方法一多环境配置文件 我们一般都会有多个应用环境,开发环境、测试环境、生产环境,各个环境的配置会略有不同,我可以根据这个创建多份配置文件,由主配置文件来控制读取那个子配置 创建...
    99+
    2024-04-02
  • 怎么将Project与Module导入到Android Studio项目中
    今天就跟大家聊聊有关怎么将Project与Module导入到Android Studio项目中,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Gradle Project项目、Modu...
    99+
    2023-05-31
    android studio module project
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作