> On 6 Apr 2016, at 12:10, Remi Forax <fo...@univ-mlv.fr> wrote:
> 
> ----- Mail original -----
>> De: "Paul Sandoz" <paul.san...@oracle.com>
>> Cc: "core-libs-dev Libs" <core-libs-dev@openjdk.java.net>
>> Envoyé: Mercredi 6 Avril 2016 09:37:00
>> Objet: Re: RFR: 8153334: Replace BufferedInputStreams use of 
>> AtomicReferenceFieldUpdater with Unsafe
>> 
>> 
>>> On 5 Apr 2016, at 17:15, Claes Redestad <claes.redes...@oracle.com> wrote:
>>> 
>>> On 04/04/2016 05:45 PM, Martin Buchholz wrote:
>>>>> I think this one is going too far.
>>>>> 
>>>>> A*FU/VarHandles should are supposed to act like a go-to replacement for
>>>>> Unsafe throughout the class library, and we want to shrink the Unsafe
>>>>> exposure. Also, I don't think removing A*FU in favor of Unsafe here wins
>>>>> us anything: there should be no throughput hit, and we *will* load A*FU
>>>>> down the road anyway, negating the startup wins.
>> 
>> +1 i would leave this one as is.
>> 
>> In general same goes for the @Stable/ForceInline annotations etc. We should
>> use this stuff carefully within java.base and also sparingly to qualifying
>> JDK modules.
> 
> While i fully agree in the general case, in disagree for this specific case,
> there are few uses of ARFU inside the JDK (or outside) but currently because 
> BufferedInputStream uses an ARFU, each time someone starts a Java 
> application, the VM loads ARFU and its implementation with a high probability 
> to no need it at all after
> 

Does that really contribute sufficiently to slow down in start time? It really 
seems like a micro-optimisation.


> ARFU are not a replacement of Unsafe, VarHandles are. So adding a new usage 
> of Unsafe for a good reason goes in the right direction here,
> when VarHandle will replace usages of Unsafe, the code of BufferedInputStream 
> will be refactored again.
> 

My preference is not to change it if it’s gonna change later on.


>> 
>>>>> 
>>>>> -Aleksey
>>>> It is surprising to see new uses of Unsafe when we have an ongoing
>>>> initiative within openjdk (especially from Paul Sandoz) to remove most
>>>> uses.  Varhandles are coming and are expected to replace uses of
>>>> Unsafe in the JDK.
>>> 
>>> This is just a very minor win on hello world/-version style tests, so I'm
>>> happy to withdraw this if other early usages, such as CHM, is moving to
>>> VarHandles anyhow.
>>> 
>>> OTOH using dangerous, internal APIs like this rather than nice, public APIs
>>> early in the VM bootstrap has other merits, such as not unintentionally
>>> causing bootstrap issues. Say, I don't know if VarHandles have any
>>> dependencies on java.lang.invoke currently…
>> 
>> It does, but was designed to be minimize bootstrap issues and class spinning
>> so there are less dependencies than MHs.
>> 
>> CHM is a tricky class because MethodType uses CHM and VHs uses MethodType.
>> There is probably a way of switching from a less concurrent concurrent map
>> to CHM at “safe-point” when the VM transitions to booted. To be
>> investigated...
> 
> another solution is perhaps to not use a concurrent hashmap in MethodType, 
> method types need to be interned only the first time a method handle is 
> invoked with an invokeExact/invoke (but not by invokedynamic) so instead of 
> interning all method types which artificially put pressure on the interning 
> map to be lock free, interning only the method type when need it may allow to 
> not use a CHM in MethodType.
> 

I need to re-familiarise myself with the code to see what is possible here. 
MethodType also comes with a shared erased form which also caches LambdaForms 
for various kinds. It’s not clear to me if this can be easily be teased apart.

Paul.

Reply via email to