javavalue-typeproject-valhalla

What are Value Types from Project Valhalla?


I've started reading about Project Valhalla and there is something I really don't understand and it's the Value Types.

This is what I understand:

1) Are objects that can't be compare it as reference?

final ValueType a = new ValueType();
final ValueType b = a;
System.out.println(a==b); returns false????

In Google AutoValue code example, it states

if(o == this){return true;}//equals method implementation what is this? I am comparing references here right?

2) According to Wikipedia, highly-efficient small 'objects' without inheritance. What do Small Objects? and Without inheritance mean?

Is this not possible using VT?

public final class ValueType extends Any //is this not possible??

3) Why are they used? Which scenario would be used and how would it be used.

4) According to Google AutoValue Library, in a nutshell, a value-typed object is an object without an identity, i.e. two value objects are considered equal if their respective internal state is equal. My question is: do they have state and should they implement equals and hashcode. What does object without an identity mean?

5) Is this assertion correct?

public static void main(final String[] args)
{
    final Test clazz = new Test();
    final AutoValue value = new AutoValue("Java Belongs to SUN");//Constructor Name
    clazz.mutate(value);
    System.out.println(value.getName()); //would print: Java Belongs to SUN??
}
private void mutate(final AutoValue value){value.setName("Java now is part of Oracle Corporation");return;}

If it is so, would JVM gain memory not tracking this Objects or Values between methods calls?

Project Valhalla is part of initial Project of Java 10 would be ready in 2018 or so.


Solution

  • Your final assertion is correct. The ValueType variables are entirely copied when passing them as a parameter to a function, rather than typically just getting a copy of the reference to an object. This allows you to treat a small object as if it were a value type like int or boolean.