问题标签 [project-valhalla]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 瓦尔哈拉计划的价值类型是什么?
我已经开始阅读有关Project Valhalla的内容,但有些东西我真的不明白,它是Value Types
.
这是我的理解:
1)不能作为参考比较的对象吗?
在Google AutoValue
代码示例中,它声明
2)根据维基百科,没有继承的高效小“对象”。是什么Small Objects?
意思Without inheritance
?
这不能使用VT吗?
3) 为什么使用它们?将使用哪种方案以及如何使用。
4) 根据Google AutoValue Library
,简而言之,值类型对象是没有标识的对象,即如果两个值对象各自的内部状态相等,则认为它们相等。我的问题是:他们是否有状态,是否应该实施equals
和hashcode
. 没有身份的对象是什么意思?
5)这个断言正确吗?
如果是这样,JVM 会获得内存而不是Objects or Values
在方法调用之间跟踪它吗?
Project Valhalla
是 Java 10 初始项目的一部分,将于 2018 年左右准备就绪。
java - Java 9 或更高版本中的预计泛型专业化,与 List: .remove() 将如何工作?
泛型专业化以及值类型是未来 JVM 的一个预计特性;此处链接到 Valhalla 项目页面。
现在,据我了解,可以声明:
但是,除了在接口中List
定义的方法之外,还定义了另一种方法,该方法将 an作为参数,该参数是要删除的列表中的索引;这就是为什么目前以下示例中的内容:.remove()
Collection
int
list
will be[1, 2]
和 not [1, 3]
(选择最具体的重载)。
但是,如果将来我们能够声明 a List<int>
,我们就有一个问题:remove
将选择方法的哪个重载?
serialization - 如果应用程序从不依赖其对象标识,是否可以序列化基于值的对象?
声纳显示
使这个基于值的字段瞬态,使其不包含在此类的序列化中。
当基于值的类将发布时,这是一个面向未来的错误。
那么,如果应用程序从不依赖其对象标识,我可以使基于值的对象成为非瞬态的吗?
java - 可以将 null 分配给值类型变量或与之进行比较吗?
在 Java 中,一直存在原始类型和引用,但没有值类型。
Project Valhalla的目标之一是探索和孵化候选特征,例如值类型。
我想知道是否null
可以将值类型变量分配给值类型变量,或者值类型变量是否可以与null
.
如果没有,我也想知道为什么。
java - 如何用默认值一般地初始化值类型?
在 Java 的Project Valhalla的上下文中,我如何一般地初始化一个使用其默认值值类型?
最初,我认为分配null
给任何值类型都会执行此初始化。但是,对这个问题的回答和评论清楚地表明,这null
是一个引用,因此它与值类型无关(正是由于值类型不是引用,而是直接值)。
例如,如果我有一个Person
带有StringValueType name
和DateValueType dateOfBirth
属性的值类型(这里dateOfBirth
将是一个包含int year
,int month
和int day
属性的嵌套值类型),我如何以通用方式Person
初始化我的值类型,以便其属性的值是for和(或相应的默认值)值)为""
name
(0, 0, 0)
dateOfBirth
分别为?
为了更清楚,如果这是 C,我会这样做:
或者在现代 C 中:
java - Valhalla 的值对象可以保存泛型类型并在它们是原始类型的情况下将它们展平吗?
JEP 169: Value Objects和JEP 218: Generics over Primitive Types规范会一起工作吗?
或者更好的是,以下情况是否可能?
接着
我问这个是因为我还没有看到@ValueCapableClass
使用泛型类型的示例,只有这样的示例:
我从JEP 218 中读到:Generics over Primitive Types(强调我的):
泛型类型参数被限制为扩展 Object,这意味着它们与原始实例不兼容,除非使用装箱,这会损害性能。随着可能向 Java 中添加值类型(单独的 JEP 的主题),这种限制变得更加繁重。我们建议通过在使用原始类型参数实例化时支持泛型类和接口的特化来解决这个问题。我们建议通过在使用原始类型参数实例化时支持泛型类和接口的特化来解决这个问题。
和
八种原始类型是唯一对泛型有敌意的类型,这是可以容忍的,但很烦人;随着value types的出现,这种限制将更加痛苦。
但我不清楚它们是要一起工作(218
是 的扩展169
),还是泛型@ValueCapableClasses
只能用于非泛型类。
java - L-world 价值类型(来自项目 valhalla)在实践中是无用的吗?
我编写了两个版本的程序来测试 java 程序中对象分配对性能的影响。一个使用简单的java对象:
和其他将 java 对象扁平化为局部变量:
两个测试都完成了相同的(计算繁重的)任务,唯一的区别是后者不分配任何点对象。我使用以下运行器来测试这些实现:
在我的机器上,第一个版本用了 2:36 分钟,第二个(优化的)版本用了 2:29 分钟。如您所见,差异可以忽略不计!这是否意味着 jit 编译器使要在 java 12 中添加的值类型无用?
我的测试用例可能不是 L-world 值类型的良好模拟。在那种情况下,瓦尔哈拉项目的 L 世界价值观类型背后的基本概念是什么?