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、按下“win+R”打开运行输入 gpedit.msc。 2、进入本地组策略编辑器。 3、依次打开“管理模板—>网络—>QoS数据包计划程序”。 4、双击右侧的“限制可保留宽带”。 5、选择“已禁用”点击“确定”即可。 方法二、 1、此方法需要借助第…

    2022年9月21日
    3.7K00
  • windows 0xc00000f4蓝屏如何解决

    0xc00000f4蓝屏解决方法: 方法一: 1、一般来说,内存读取错误的情况只要重启一下电脑就可以解决了。 2、如果重启没解决,那么再次重启,然后在开机时按下“F8”进入如下界面。 3、接着选择其中的“安全模式”进入。 4、进入安全模式后,卸载最近一次电脑使用时安装的驱动和软件,再重启电脑即可。 …

    2022年9月15日
    43100
  • NMAP的端口扫描技术是什么

    什么是端口? 将网络设备比作一间房子,那么端口就是进出该房子的出入口(奇怪的地方就是这个房子的出入口太多了,多达65535个),这些出入口供数据进出网络设备。 设置端口的目的,就是为了实现 “一机多用”,即在一台机器上运行多种不同的服务。那么当一台机器上运行着多个程序时,机器是如何区分不同程序的数据…

    2022年9月8日
    66000
  • windows中c盘怎么扩大

    c盘可以扩大容量。方法:1、利用“win键+X键”选择“磁盘管理”,删除C盘右侧的分区,使其变为未分配分区;2、右键c盘点击“扩展卷”,系统会自动计算出最大扩容量,没特殊扩展需求点击下一步,完成即可。 本教程操作环境:windows10系统、DELL G3电脑。 c盘可以扩大吗 C盘可以扩容,只需要…

    2022年9月6日
    66000
  • steam人机身份验证captcha无效如何解决

    方法一: 1、使用浏览器打开steam。 2、建议使用谷歌浏览器。 3、在谷歌浏览器中就能通过人机验证了。 方法二: 1、如果在浏览器中也无法解决。 2、可以先将右上角的”语言“改为“英语”再试试看。 方法三: 1、如果还是不行,那么打开防火墙,点击“启用或关闭windows…

    2022年8月30日
    74900
  • 电脑键盘不能打字变成快捷键了怎么解决

    电脑键盘不能打字变成快捷键解决方法 名列前茅种方法 最简单的就是重启一下电脑,方便快捷的解决问题。 第二种方法 1,一般情况下是电脑键盘上的“windows“键出问题了,应该是压下后未弹起,可以先检查一下。 “windows“键就是ctrl和alt键之间的 2,WIN键(也就是那个开机四个方块图样的…

    2022年9月6日
    5.9K00
  • windows浩辰cad看图王图片怎么放大

    浩辰cad看图王图片放大步骤: 一、按钮调整。 1、打开对应的文件。 2、找到如图位置的放大镜按钮。 3、选择需要使用的放大/缩小。 二、鼠标调整。 按住你的键盘ctrl,同时滑动鼠标的滚轮,向上是放大,向下是缩小。 到此,关于“windows浩辰cad看图王图片怎么放大”的学习就结束了,希望能够解…

    2022年9月21日
    66600
  • replace如何替换变量数据

    在php中,“preg_replace”函数可以执行一个正则表达式的搜索和替换来替换变量数据,语法为“preg_replace(规定搜索的模式,用于替换的字符串或字符串数组,要搜索替换的目标字符串或字符串数组,字符串的最大可替换次数,替换执行的次数)”;若subject是一个数组则返回的结果是一个数…

    2022年6月27日
    56900
  • Javascript怎样替换数组中的特定值

    替换数组中的特定值 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原始数组。特别需要注意插入值的位置! // arrayObject.splice(index,howmany,item1,…..,itemX)var plants = [‘Saturn’, ‘…

    2022年8月31日
    62200
  • Android基于方法池与回调怎么实现登录拦截

    一、使用通知与回调 其实本质逻辑就是想判断用户是否已经登录,然后跳转到登录页面,登录完成之后再跳转到个人中心,那我们使用通知回调不就行了吗? 在登录完成之后发出通知,在首页我们接受这个通知就调用去个人中心的方法不就行了吗? 使用通知的方式有很多,这里我们以LiveEventBus为例: public…

    2022年8月27日
    40600
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部