Re: performance degradation in Array::newInstance on -XX:TieredStopAtLevel=1

2019-01-04 Thread Martin Buchholz
On Thu, Jan 3, 2019 at 11:26 PM Сергей Цыпанов wrote: > > I've run into this performance effect while investigating creation of > Spring's ConcurrentReferenceHashMap, > it turned out that it used Array::newInstance to create array of > References stored in a map's Segment: > Slight tangent -

Re: performance degradation in Array::newInstance on -XX:TieredStopAtLevel=1

2019-01-04 Thread Claes Redestad
Hi, I've also taken a look at your microbenchmark and seen a few regressions from 9 through 12, some of which I've identified - and some that might be (partially) actionable. Mostly related to recent additions of low overhead heap sampling and allocator/GC changes. All of the blame is in

Re: performance degradation in Array::newInstance on -XX:TieredStopAtLevel=1

2019-01-03 Thread Сергей Цыпанов
Hi Claes, thanks for the explanation, I suspected something like that. I've run into this performance effect while investigating creation of Spring's ConcurrentReferenceHashMap, it turned out that it used Array::newInstance to create array of References stored in a map's Segment: private

Re: performance degradation in Array::newInstance on -XX:TieredStopAtLevel=1

2019-01-02 Thread Claes Redestad
Hi, what you're seeing specifically here is likely the native overhead: Array::newInstance calls into the native method Array::newArray, and C1 (TierStopAtLevel=1) doesn't have an intrinsic for this, while C2 does. C1 and the interpreter will instead call into

performance degradation in Array::newInstance on -XX:TieredStopAtLevel=1

2019-01-02 Thread Сергей Цыпанов
Hello, -XX:TieredStopAtLevel=1 flag is often used in some applications (e.g. Spring Boot based) to reduce start-up time. With this flag I've spotted huge performance degradation of Array::newInstance comparing to plain constructor call. I've used this benchmark @State(Scope.Thread)