I think the main point of including the "value-based" admonition is to warn developers not to depend on identity semantics of these things. This should help preserve flexibility when/if we decide to convert them to value types in the future. It might be that there's no advantage in doing so, in which case we presumably won't do it. :-)

I'm somewhat distant from the current state of the value types work, but I can imagine that it would provide some advantage even for the empty List. Clearly the overall heap savings wouldn't be large, since as you point out, there's only ever a single instance. But if it were a value type, it could live entirely on the stack, avoiding a memory dereference, a cache miss, etc.

s'marks

On 11/24/15 7:52 PM, Rezaei, Mohammad A. wrote:
Value based things make a lot of sense for types that don't belong to well 
established reference hierarchies. I can even see great uses for a value based 
List implementation, so long as it's preferentially referenced as the exact 
type (e.g. private ValueBasedList someList = ...) and rarely cast to the 
interface type (List).

But I've been scratching my head about the empty collections (of()) and I can't 
figure out why value based would be a good idea. Currently, there is only one 
instance in the entire VM, so it's unlikely to get any memory benefits. The most 
likely use for the return value is either a variable/member of type List or something 
that can hold a List (like a Map<K, List>), which will likely cause an 
immediate boxing. In some cases this can be elided (lots of inlining and 
optimization), but that's the less likely case.

What's the rationale for the value based spec for the empty implementations?

Thanks
Moh

-----Original Message-----
From: core-libs-dev [mailto:core-libs-dev-boun...@openjdk.java.net] On Behalf
Of John Rose
Sent: Tuesday, November 24, 2015 9:08 PM
To: Stuart Marks
Cc: core-libs-dev
Subject: Re: RFR(m): JEP 269 initial API and skeleton implementation (JDK-
8139232)

On Nov 23, 2015, at 10:26 PM, Stuart Marks <stuart.ma...@oracle.com> wrote:

Please review these API and implementation changes that comprise the first
integration of JEP 269. I intend to push this under the "initial API and
skeleton implementation" subtask, JDK-8139232.

Please strengthen the specification to assert that the new immutables are in
fact value-based.

http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html
<http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html>

This will prevent people from relying on their identity (acmp) and
synchronization (monitorenter).
It will allow optimizations more freedom to use flatter storage formats and to
reuse list values.

If we don't do this now, then we will not be able to retroactively make or
enforce the claim,
and the optimizations will be impossible.

— John

Reply via email to