您的位置: 翼速应用 > 业内知识 > Java > 正文

关于Java Valhalla Project项目之详细解析来了

本文是关于Java Valhalla Project项目的详细解析,主要围绕Java Valhalla Project项目展开介绍,希望能给大家带来帮助。


关于Java Valhalla Project项目之详细解析来了


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


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


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


value class Point {
  int x;
  int y
}


值类型Point的代码和相应的内存布局


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


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


在数组中使用Point类时间接的负面影响


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


值类型Point[]的相应内存结构


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


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


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


●  更快的对象


●  用户定义原语


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


Specialized Generics 专用泛型


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


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


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


结论


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


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


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


以上就是关于Java Valhalla Project项目之详细解析,翼速应用平台内有更多相关资讯,欢迎查阅!

我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题