Hi Vladimir,

The difference would be in the licensing.

Kind regards,
Kirk Pepperdine

On Jun 23, 2015, at 7:31 AM, Vladimir Voskresensky 
<vladimir.voskresen...@oracle.com> wrote:

> Hello Jeremy,
> 
> If this is sampling, not tracing, then how is it different from the 
> low-overhead memory profiling provided by JFR [1].
> JFR samples per new TLAB allocation. It provides really very good picture and 
> I haven't seen overhead more than 2%.
> Btw, JFR also does not have false positives reported by instrumented 
> approaches for the cases when JIT was able to eliminate heap allocation.
> 
> Thanks,
> Vladimir.
> [1] http://hirt.se/blog/?p=381
> 
> On 22.06.2015 11:48, Jeremy Manson wrote:
>> Hey folks,
>> 
>> (cc'ing Aleksey and John, because I mentioned this to them at the JVMLS last 
>> year, but I never followed up.)
>> 
>> We have a patch at Google I've always wanted to contribute to OpenJDK, but I 
>> always figured it would be unwanted.  I've recently been thinking that might 
>> not be as true, though.  I thought I would ask if there is any interest / if 
>> I should write a JEP / if I should just forget it.
>> 
>> The basic problem is that there is no low-overhead supported way to figure 
>> out where allocation hotspots are. That is, sets of stack traces where lots 
>> of allocation / large allocations took place.
>> 
>> What I had originally done (this was in ~2007) was use bytecode rewriting to 
>> instrument allocation sites.  The instrumentation would call a Java method, 
>> and the method would capture a stack trace.  To reduce overhead, there was a 
>> per-thread counter that only took a stack trace once every N bytes 
>> allocated, where N is a randomly chosen point in a probability distribution 
>> that centered around ~512K.
>> 
>> This was *way* too slow, and it didn't pick up allocations through JNI, so I 
>> instrumented allocations at the VM level, and the overhead went away.  The 
>> sampling is always turned on in our internal VMs, and a user can just query 
>> an interface for a list of sampled stack traces.  The allocated stack traces 
>> are held with weak refs, so you only get live samples.
>> 
>> The additional overhead for allocations amounts to a subtraction, and an 
>> occasional stack trace, which is usually a very, very small amount of our 
>> CPU (although I had to do some jiggering in JDK8 to fix some performance 
>> regressions).
>> 
>> There really isn't another good way to do this with low overhead.  I was 
>> wondering how the gruop would feel about our contributing it?
>> 
>> Thoughts?
>> 
>> Jeremy
> 

Reply via email to