Java Valhalla Project项目是什么

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;}

Java Valhalla Project项目是什么

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

value class Point {  int x;  int y}

Java Valhalla Project项目是什么

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

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

Java Valhalla Project项目是什么

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

Java Valhalla Project项目是什么

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

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

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

  • 更快的对象

  • 用户定义原语

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

Specialized Generics 专用泛型

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

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

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

感谢各位的阅读,以上就是“Java Valhalla Project项目是什么”的内容了,经过本文的学习后,相信大家对Java Valhalla Project项目是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

文章标题:Java Valhalla Project项目是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/23500

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月8日 上午1:27
下一篇 2022年9月8日 上午1:28

相关推荐

  • windows默认网关不可用怎么解决

    默认网关不可用解决方法: 1、首先按下“Win+R”打开运行,输入“CMD”并打开。 2、打开管理员界面后,输入命令“netsh winsock reset”并按下回车。 3、然后再输入“netsh int ip reset reset.log”,然后再点击回车运行该命令,然后重启电脑运行。 4、然…

    2022年9月22日
    56900
  • windows会声会影如何导出视频高清

    会声会影导出视频高清的方法 1、首先我们要保证我们的源视频是高清的,否则无论如何操作都无法导出高清的视频。 2、接着我们在导入视频前要设置高清的项目环境,这样我们就能在高清的环境中编辑视频了。 3、点击左上角“设置”,选择“项目属性”。 4、根据我们需要的参数设置相应的项目格式。 5、当我们编辑完成…

    2022年9月15日
    5300
  • windows驱动精灵dx如何修复

    驱动精灵dx修复方法: 1、打开驱动精灵点击“百宝箱”。 2、点击右下方的“软件管理”。 3、在搜索栏中输入“Directx”。 4、找到“Directx 修复工具”点击“安装”即可。 感谢各位的阅读,以上就是“windows驱动精灵dx如何修复”的内容了,经过本文的学习后,相信大家对windows…

    2022年9月10日
    9200
  • 电脑出现0x0000007b如何解决

    解决方法: 方法一: 1、很可能是更新了错误的显卡驱动,出现错误代码后先重启电脑。 2、随后按下“F8”进入安全模式选择界面,选择“最近一次的正确配置”就能进入系统了。 3、这样可以解决应用程序冲突问题,如果无法解决,那么可以尝试更改硬盘启动模式。 方法二: 1、首先重启电脑,然后使用热键进入bio…

    2022年9月18日
    6000
  • JavaScript变量or循环中的var和let怎么使用

    在for循环中使用var声明初始化带来的问题 // 一道经典面试题:var funcs = [];for (var i = 0; i < 3; i++) { funcs[i] = function() { console.log(“My value: ” + i) };}for (var j …

    2022年9月15日
    6600
  • App崩溃的6个常见原因是什么

    人们讨厌应用程序崩溃,尤其是是程序减速或卡死几秒钟这样的现象。根据Dimensional Research的一项调查,61%的用户希望程序在4秒内启动,而49%的用户希望在2秒内响应输入。 如果应用发生崩溃,冻结或报错等现象,53%的用户会将APP卸载。 无论您的对象是消费者还是企业,崩溃问题会令他…

    2022年9月2日
    82500
  • 基于签名算法且简单安全的API授权机制是什么

    笔者以前在做广告系统时发现对接的大多数平台的广告系统都是以token方式授权接口,而且这个token是一直不变的,由广告主提供,可以说这就是裸奔的接口,只不过这种接口对安全性要求不高,这只能防止恶意调用以及验证渠道的身份。 去年笔者写过一个API统一授权平台,为内部服务开放接口给第三方系统调用提供统…

    2022年9月8日
    13100
  • 电脑0xc06d007e如何解决

    0xc06d007e修复方法: 方法一: 1、首先,如果我们是在开启一些图像处理软件或是播放器软件时才会出现问题。 2、那么就可能是因为电脑缺少了Windows Media player软件。 3、下载安装完成后,大家可以尝试再去打开软件,如果打不开的话再尝试下面的方法。 方法二: 1、如果上面的方…

    2022年9月18日
    41400
  • html有哪些常用的结构元素

    html常用的结构元素有:1、div,可定义文档中的分区或节,用于为HTML文档内大块(block-level)的内容提供结构和背景;2、section,表示文档中的一个区域;3、article,表示文档、页面、应用或网站中的独立结构,其意在成为可独立分配的或可复用的结构;4、aside,表示一个和…

    2022年9月16日
    10700
  • mybatisplus雪花算法生成Id怎么使用

    雪花算法实战 1.建表 DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT ‘主键ID’, name VARCHAR(30) NULL DEFAULT NULL COMMENT ‘姓名’, age I…

    2022年9月21日
    23800
联系我们
站长微信
站长微信
分享本页
返回顶部