Login
Log in using an SSO provider:
Fedora Account System
Red Hat Associate
Red Hat Customer
Login using a Red Hat Bugzilla account
Forgot Password
Create an Account
Red Hat Bugzilla – Attachment 1847240 Details for
Bug 1862163
Copying of Byte[] with System.arraycopy and Arrays.copyOf is much slower with JDK 11.0.8 compared to JDK 1.8.0_181
Home
New
Search
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh90 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
[?]
This site requires JavaScript to be enabled to function correctly, please enable it.
JDK11 profiling
profile-11.html (text/html), 16.91 KB, created by
Mike Millson
on 2021-12-21 22:06:32 UTC
(
hide
)
Description:
JDK11 profiling
Filename:
MIME Type:
Creator:
Mike Millson
Created:
2021-12-21 22:06:32 UTC
Size:
16.91 KB
patch
obsolete
><!DOCTYPE html> ><html lang='en'> ><head> ><meta charset='utf-8'> ><style> > body {margin: 0; padding: 10px; background-color: #ffffff} > h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center} > header {margin: -24px 0 5px 0; line-height: 24px} > button {font: 12px sans-serif; cursor: pointer} > p {margin: 5px 0 5px 0} > a {color: #0366d6} > #hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px} > #hl span {padding: 0 3px 0 3px} > #status {overflow: hidden; white-space: nowrap} > #match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right} > #reset {cursor: pointer} ></style> ></head> ><body style='font: 12px Verdana, sans-serif'> ><h1>Wall clock profile</h1> ><header style='text-align: left'><button id='reverse' title='Reverse'>🔻</button> <button id='search' title='Search'>🔍</button></header> ><header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header> ><canvas id='canvas' style='width: 100%; height: 224px'></canvas> ><div id='hl'><span></span></div> ><p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>❌</span></p> ><p id='status'> </p> ><script> > // Copyright 2020 Andrei Pangin > // Licensed under the Apache License, Version 2.0. > 'use strict'; > var root, rootLevel, px, pattern; > var reverse = false; > const levels = Array(14); > for (let h = 0; h < levels.length; h++) { > levels[h] = []; > } > > const canvas = document.getElementById('canvas'); > const c = canvas.getContext('2d'); > const hl = document.getElementById('hl'); > const status = document.getElementById('status'); > > const canvasWidth = canvas.offsetWidth; > const canvasHeight = canvas.offsetHeight; > canvas.style.width = canvasWidth + 'px'; > canvas.width = canvasWidth * (devicePixelRatio || 1); > canvas.height = canvasHeight * (devicePixelRatio || 1); > if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio); > c.font = document.body.style.font; > > const palette = [ > [0x50e150, 30, 30, 30], > [0x50bebe, 30, 30, 30], > [0xe17d00, 30, 30, 0], > [0xc8c83c, 30, 30, 10], > [0xe15a5a, 30, 40, 40], > ]; > > function getColor(p) { > const v = Math.random(); > return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16); > } > > function f(level, left, width, type, title) { > levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title}); > } > > function samples(n) { > return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples'; > } > > function pct(a, b) { > return a >= b ? '100' : (100 * a / b).toFixed(2); > } > > function findFrame(frames, x) { > let left = 0; > let right = frames.length - 1; > > while (left <= right) { > const mid = (left + right) >>> 1; > const f = frames[mid]; > > if (f.left > x) { > right = mid - 1; > } else if (f.left + f.width <= x) { > left = mid + 1; > } else { > return f; > } > } > > if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left]; > if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right]; > > return null; > } > > function search(r) { > if (r && (r = prompt('Enter regexp to search:', '')) === null) { > return; > } > > pattern = r ? RegExp(r) : undefined; > const matched = render(root, rootLevel); > document.getElementById('matchval').textContent = pct(matched, root.width) + '%'; > document.getElementById('match').style.display = r ? 'inherit' : 'none'; > } > > function render(newRoot, newLevel) { > if (root) { > c.fillStyle = '#ffffff'; > c.fillRect(0, 0, canvasWidth, canvasHeight); > } > > root = newRoot || levels[0][0]; > rootLevel = newLevel || 0; > px = canvasWidth / root.width; > > const x0 = root.left; > const x1 = x0 + root.width; > const marked = []; > > function mark(f) { > return marked[f.left] >= f.width || (marked[f.left] = f.width); > } > > function totalMarked() { > let total = 0; > let left = 0; > Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) { > if (+x >= left) { > total += marked[x]; > left = +x + marked[x]; > } > }); > return total; > } > > function drawFrame(f, y, alpha) { > if (f.left < x1 && f.left + f.width > x0) { > c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color; > c.fillRect((f.left - x0) * px, y, f.width * px, 15); > > if (f.width * px >= 21) { > const chars = Math.floor(f.width * px / 7); > const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..'; > c.fillStyle = '#000000'; > c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6); > } > > if (alpha) { > c.fillStyle = 'rgba(255, 255, 255, 0.5)'; > c.fillRect((f.left - x0) * px, y, f.width * px, 15); > } > } > } > > for (let h = 0; h < levels.length; h++) { > const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16; > const frames = levels[h]; > for (let i = 0; i < frames.length; i++) { > drawFrame(frames[i], y, h < rootLevel); > } > } > > return totalMarked(); > } > > canvas.onmousemove = function() { > const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16); > if (h >= 0 && h < levels.length) { > const f = findFrame(levels[h], event.offsetX / px + root.left); > if (f) { > hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px'; > hl.style.width = (Math.min(f.width, root.width) * px) + 'px'; > hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px'; > hl.firstChild.textContent = f.title; > hl.style.display = 'block'; > canvas.title = f.title + '\n(' + samples(f.width) + ', ' + pct(f.width, levels[0][0].width) + '%)'; > canvas.style.cursor = 'pointer'; > canvas.onclick = function() { > if (f != root) { > render(f, h); > canvas.onmousemove(); > } > }; > status.textContent = 'Function: ' + canvas.title; > return; > } > } > canvas.onmouseout(); > } > > canvas.onmouseout = function() { > hl.style.display = 'none'; > status.textContent = '\xa0'; > canvas.title = ''; > canvas.style.cursor = ''; > canvas.onclick = ''; > } > > document.getElementById('reverse').onclick = function() { > reverse = !reverse; > render(); > } > > document.getElementById('search').onclick = function() { > search(true); > } > > document.getElementById('reset').onclick = function() { > search(false); > } > > window.onkeydown = function() { > if (event.ctrlKey && event.keyCode === 70) { > event.preventDefault(); > search(true); > } else if (event.keyCode === 27) { > search(false); > } > } >f(0,0,4864,4,'all') >f(1,0,1,4,'.annobin___pthread_cond_signal.start') >f(1,1,628,4,'.annobin___pthread_cond_timedwait.start') >f(1,629,129,0,'TestByteArrayCopy.main') >f(2,629,129,0,'java/util/Arrays.copyOf') >f(3,629,129,0,'java/util/Arrays.copyOf') >f(4,629,6,0,'java/lang/System.arraycopy') >f(5,629,6,4,'JVM_ArrayCopy') >f(6,629,6,3,'ObjArrayKlass::copy_array(arrayOopDesc*, int, arrayOopDesc*, int, int, Thread*)') >f(7,629,6,3,'ObjArrayKlass::do_copy(arrayOopDesc*, unsigned long, arrayOopDesc*, unsigned long, int, Thread*) [clone .constprop.124]') >f(8,629,3,4,'aci_CopyRight') >f(8,632,3,3,'bool AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<36225142ul, G1BarrierSet>, (AccessInternal::BarrierType)8, 36225142ul>::oop_access_barrier<HeapWord>(arrayOopDesc*, unsigned long, HeapWord*, arrayOopDesc*, unsigned long, HeapWord*, unsigned long)') >f(9,632,3,3,'G1BarrierSet::write_ref_array_pre(unsigned int*, unsigned long, bool)') >f(4,635,93,0,'java/lang/reflect/Array.newInstance') >f(5,635,93,0,'java/lang/reflect/Array.newArray') >f(6,635,6,4,'JVM_NewArray') >f(7,635,6,3,'Reflection::reflect_new_array(oopDesc*, int, Thread*)') >f(8,635,6,3,'InstanceKlass::allocate_objArray(int, int, Thread*)') >f(9,635,6,3,'CollectedHeap::array_allocate(Klass*, int, int, bool, Thread*)') >f(10,635,6,3,'MemAllocator::allocate() const') >f(11,635,6,4,'__memset_avx2_erms') >f(6,641,87,4,'__pthread_cond_wait') >f(4,728,30,4,'oop_disjoint_arraycopy') >f(1,758,1,4,'[not_walkable_Java]') >f(2,758,1,3,'G1BarrierSet::invalidate(MemRegion)') >f(3,758,1,3,'PtrQueue::enqueue_known_active(void*)') >f(1,759,8,4,'[unknown]') >f(2,759,8,4,'clock_gettime@@GLIBC_2.17') >f(3,760,7,4,'__vdso_clock_gettime') >f(1,767,1,4,'[unknown_Java]') >f(2,767,1,3,'G1BarrierSet::invalidate(MemRegion)') >f(3,767,1,3,'PtrQueue::enqueue_known_active(void*)') >f(1,768,132,4,'__GI___pthread_timedjoin_ex') >f(1,900,1249,4,'__pthread_cond_wait') >f(1,2149,1028,4,'do_futex_wait.constprop.1') >f(1,3177,132,0,'java/lang/ref/Finalizer$FinalizerThread.run') >f(2,3177,132,0,'java/lang/ref/ReferenceQueue.remove') >f(3,3177,132,0,'java/lang/ref/ReferenceQueue.remove') >f(4,3177,132,0,'java/lang/Object.wait') >f(5,3177,132,4,'__pthread_cond_wait') >f(1,3309,132,0,'java/lang/ref/Reference$ReferenceHandler.run') >f(2,3309,132,0,'java/lang/ref/Reference.processPendingReferences') >f(3,3309,132,0,'java/lang/ref/Reference.waitForReferencePendingList') >f(4,3309,132,4,'__pthread_cond_wait') >f(1,3441,132,0,'jdk/internal/misc/InnocuousThread.run') >f(2,3441,132,0,'java/lang/Thread.run') >f(3,3441,132,0,'jdk/internal/ref/CleanerImpl.run') >f(4,3441,132,0,'java/lang/ref/ReferenceQueue.remove') >f(5,3441,132,0,'java/lang/Object.wait') >f(6,3441,132,4,'.annobin___pthread_cond_timedwait.start') >f(1,3573,1291,4,'start_thread') >f(2,3573,1291,4,'thread_native_entry(Thread*)') >f(3,3573,1291,3,'Thread::call_run()') >f(4,3573,398,3,'ConcurrentGCThread::run()') >f(5,3573,398,3,'G1ConcurrentRefineThread::run_service()') >f(6,3573,398,3,'DirtyCardQueueSet::refine_completed_buffer_concurrently(unsigned int, unsigned long)') >f(7,3576,395,4,'.annobin__ZN8G1RemSet24refine_card_concurrentlyEPaj.start') >f(8,3597,371,4,'.annobin__ZN10HeapRegion32oops_on_card_seq_iterate_carefulILb0E28G1ConcurrentRefineOopClosureEEb9MemRegionPT0_.start') >f(9,3597,48,4,'.annobin__ZN28OopOopIterateBoundedDispatchI28G1ConcurrentRefineOopClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') >f(10,3616,13,3,'BitMap::par_at_put(unsigned long, bool)') >f(10,3629,16,3,'OtherRegionsTable::add_reference(void*, unsigned int)') >f(9,3645,166,3,'OtherRegionsTable::add_reference(void*, unsigned int)') >f(9,3811,157,3,'void G1ConcurrentRefineOopClosure::do_oop_work<unsigned int>(unsigned int*)') >f(8,3968,1,4,'.annobin__ZN28OopOopIterateBoundedDispatchI28G1ConcurrentRefineOopClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') >f(8,3969,1,3,'G1CollectedHeap::is_obj_dead(oopDesc*, HeapRegion const*) const') >f(8,3970,1,3,'G1HotCardCache::insert(signed char*)') >f(4,3971,892,3,'GangWorker::loop()') >f(5,3971,2,4,'.annobin__ZN14G1CMRemarkTask4workEj.start') >f(6,3971,2,3,'G1CMTask::do_marking_step(double, bool, bool)') >f(7,3971,2,4,'SpinPause') >f(5,3973,1,4,'.annobin__ZN21ParallelSPCleanupTask4workEj.start') >f(6,3973,1,3,'Threads::possibly_parallel_threads_do(bool, ThreadClosure*)') >f(7,3973,1,3,'JavaThread::nmethods_do(CodeBlobClosure*)') >f(5,3974,2,3,'G1CMConcurrentMarkingTask::work(unsigned int)') >f(6,3974,2,3,'G1CMTask::do_marking_step(double, bool, bool)') >f(7,3974,1,4,'SpinPause') >f(7,3975,1,4,'__GI_sched_yield') >f(5,3976,2,3,'G1ClearBitMapTask::work(unsigned int)') >f(6,3976,2,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') >f(7,3976,2,4,'.annobin__ZN17G1ClearBitMapTask22G1ClearBitmapHRClosure14do_heap_regionEP10HeapRegion.start') >f(8,3976,2,3,'G1CMBitMap::clear_range(MemRegion)') >f(9,3976,2,4,'__memset_avx2_erms') >f(5,3978,856,3,'G1ParTask::work(unsigned int)') >f(6,3978,1,3,'G1ParEvacuateFollowersClosure::do_void()') >f(7,3978,1,3,'GenericTaskQueue<StarTask, (MemoryType)5, 131072u>::pop_global(StarTask volatile&)') >f(6,3979,91,3,'G1RemSet::oops_into_collection_set_do(G1ParScanThreadState*, unsigned int)') >f(7,3979,91,3,'G1RemSet::update_rem_set(G1ParScanThreadState*, unsigned int)') >f(8,3979,91,4,'.annobin__ZN15G1CollectedHeap26iterate_dirty_card_closureEP21CardTableEntryClosurej.start') >f(9,3979,91,3,'DirtyCardQueueSet::apply_closure_to_completed_buffer(CardTableEntryClosure*, unsigned int, unsigned long, bool)') >f(10,3979,2,3,'G1ParScanThreadState::trim_queue_partially()') >f(10,3981,89,3,'G1RefineCardClosure::do_card_ptr(signed char*, unsigned int)') >f(11,3981,1,3,'G1CardTable::mark_card_deferred(unsigned long)') >f(11,3982,64,3,'G1ParScanThreadState::trim_queue_partially()') >f(12,4045,1,3,'CompositeElapsedCounterSource::now()') >f(13,4045,1,3,'os::elapsed_counter()') >f(11,4046,24,3,'G1RemSet::refine_card_during_gc(signed char*, G1ScanObjsDuringUpdateRSClosure*) [clone .part.136]') >f(12,4046,24,4,'.annobin__ZN10HeapRegion32oops_on_card_seq_iterate_carefulILb1E31G1ScanObjsDuringUpdateRSClosureEEb9MemRegionPT0_.start') >f(13,4046,10,3,'OverflowTaskQueue<StarTask, (MemoryType)5, 131072u>::push(StarTask) [clone .constprop.567]') >f(13,4056,12,3,'void G1ScanObjsDuringUpdateRSClosure::do_oop_work<unsigned int>(unsigned int*)') >f(13,4068,2,3,'void OopOopIterateBoundedDispatch<G1ScanObjsDuringUpdateRSClosure>::Table::oop_oop_iterate_bounded<ObjArrayKlass, unsigned int>(G1ScanObjsDuringUpdateRSClosure*, oopDesc*, Klass*, MemRegion)') >f(6,4070,761,3,'G1RemSet::scan_rem_set(G1ParScanThreadState*, unsigned int)') >f(7,4070,761,3,'G1CollectionSet::iterate_from(HeapRegionClosure*, unsigned int, unsigned int) const') >f(8,4070,761,3,'G1ScanRSForRegionClosure::do_heap_region(HeapRegion*)') >f(9,4070,5,3,'G1ParScanThreadState::trim_queue_partially()') >f(9,4075,2,3,'G1ScanRSForRegionClosure::claim_card(unsigned long, unsigned int)') >f(9,4077,754,3,'G1ScanRSForRegionClosure::scan_rem_set_roots(HeapRegion*)') >f(10,4081,1,4,'.annobin__ZN28OopOopIterateBoundedDispatchI29G1ScanObjsDuringScanRSClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') >f(10,4082,25,3,'G1CardTable::mark_card_deferred(unsigned long)') >f(10,4107,517,3,'G1ParScanThreadState::trim_queue_partially()') >f(11,4621,2,3,'CompositeElapsedCounterSource::now()') >f(12,4622,1,3,'os::elapsed_counter()') >f(11,4623,1,3,'PtrQueue::enqueue_known_active(void*)') >f(10,4624,2,3,'HeapRegionRemSetIterator::fine_has_next(unsigned long&)') >f(10,4626,14,3,'HeapRegionRemSetIterator::has_next(unsigned long&)') >f(11,4631,9,3,'HeapRegionRemSetIterator::fine_has_next(unsigned long&)') >f(10,4640,191,3,'bool HeapRegion::oops_on_card_seq_iterate_careful<true, G1ScanObjsDuringScanRSClosure>(MemRegion, G1ScanObjsDuringScanRSClosure*)') >f(11,4641,13,4,'.annobin__ZN28OopOopIterateBoundedDispatchI29G1ScanObjsDuringScanRSClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') >f(11,4654,112,4,'.annobin__ZN29G1ScanObjsDuringScanRSClosure11do_oop_workIjEEvPT_.start') >f(11,4766,65,3,'OverflowTaskQueue<StarTask, (MemoryType)5, 131072u>::push(StarTask) [clone .constprop.567]') >f(6,4831,3,3,'G1RootProcessor::evacuate_roots(G1ParScanThreadState*, unsigned int)') >f(7,4831,3,3,'G1RootProcessor::process_java_roots(G1RootClosures*, G1GCPhaseTimes*, unsigned int)') >f(8,4831,1,3,'ClassLoaderDataGraph::roots_cld_do(CLDClosure*, CLDClosure*)') >f(9,4831,1,3,'G1CLDScanClosure::do_cld(ClassLoaderData*)') >f(10,4831,1,3,'ClassLoaderData::ChunkedHandleList::oops_do(OopClosure*)') >f(11,4831,1,4,'.annobin__ZN16G1ParCopyClosureIL9G1Barrier1EL6G1Mark1EE6do_oopEPP7oopDesc.start') >f(12,4831,1,4,'__memmove_avx_unaligned_erms') >f(8,4832,2,3,'Threads::possibly_parallel_oops_do(bool, OopClosure*, CodeBlobClosure*)') >f(9,4832,1,3,'CodeCacheSweeperThread::oops_do(OopClosure*, CodeBlobClosure*)') >f(10,4832,1,3,'JavaThread::oops_do(OopClosure*, CodeBlobClosure*)') >f(11,4832,1,3,'G1ParCopyClosure<(G1Barrier)0, (G1Mark)1>::do_oop(oopDesc**)') >f(12,4832,1,4,'__memmove_avx_unaligned_erms') >f(9,4833,1,3,'JavaThread::oops_do(OopClosure*, CodeBlobClosure*)') >f(10,4833,1,3,'JNIHandleBlock::oops_do(OopClosure*)') >f(11,4833,1,3,'G1ParCopyClosure<(G1Barrier)0, (G1Mark)1>::do_oop(oopDesc**)') >f(12,4833,1,3,'G1ParScanThreadState::copy_to_survivor_space(InCSetState, oopDesc*, markOopDesc*)') >f(5,4834,23,3,'G1RebuildRemSetTask::work(unsigned int)') >f(6,4834,23,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') >f(7,4834,23,3,'G1RebuildRemSetTask::G1RebuildRemSetHeapRegionClosure::do_heap_region(HeapRegion*)') >f(8,4834,7,4,'.annobin__ZN22G1RebuildRemSetClosure11do_oop_workIjEEvPT_.start') >f(8,4841,5,4,'.annobin__ZN28OopOopIterateBoundedDispatchI22G1RebuildRemSetClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') >f(9,4845,1,3,'BitMap::par_at_put(unsigned long, bool)') >f(8,4846,11,3,'OtherRegionsTable::add_reference(void*, unsigned int)') >f(5,4857,6,3,'G1ReclaimEmptyRegionsTask::work(unsigned int)') >f(6,4857,6,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') >f(7,4862,1,4,'.annobin__ZN25G1ReclaimEmptyRegionsTask28G1ReclaimEmptyRegionsClosure14do_heap_regionEP10HeapRegion.start') >f(4,4863,1,3,'VMThread::run()') >f(5,4863,1,3,'VMThread::loop()') >f(6,4863,1,3,'SafepointSynchronize::begin()') >render(); ></script></body></html>
<!DOCTYPE html> <html lang='en'> <head> <meta charset='utf-8'> <style> body {margin: 0; padding: 10px; background-color: #ffffff} h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center} header {margin: -24px 0 5px 0; line-height: 24px} button {font: 12px sans-serif; cursor: pointer} p {margin: 5px 0 5px 0} a {color: #0366d6} #hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px} #hl span {padding: 0 3px 0 3px} #status {overflow: hidden; white-space: nowrap} #match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right} #reset {cursor: pointer} </style> </head> <body style='font: 12px Verdana, sans-serif'> <h1>Wall clock profile</h1> <header style='text-align: left'><button id='reverse' title='Reverse'>🔻</button> <button id='search' title='Search'>🔍</button></header> <header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header> <canvas id='canvas' style='width: 100%; height: 224px'></canvas> <div id='hl'><span></span></div> <p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>❌</span></p> <p id='status'> </p> <script> // Copyright 2020 Andrei Pangin // Licensed under the Apache License, Version 2.0. 'use strict'; var root, rootLevel, px, pattern; var reverse = false; const levels = Array(14); for (let h = 0; h < levels.length; h++) { levels[h] = []; } const canvas = document.getElementById('canvas'); const c = canvas.getContext('2d'); const hl = document.getElementById('hl'); const status = document.getElementById('status'); const canvasWidth = canvas.offsetWidth; const canvasHeight = canvas.offsetHeight; canvas.style.width = canvasWidth + 'px'; canvas.width = canvasWidth * (devicePixelRatio || 1); canvas.height = canvasHeight * (devicePixelRatio || 1); if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio); c.font = document.body.style.font; const palette = [ [0x50e150, 30, 30, 30], [0x50bebe, 30, 30, 30], [0xe17d00, 30, 30, 0], [0xc8c83c, 30, 30, 10], [0xe15a5a, 30, 40, 40], ]; function getColor(p) { const v = Math.random(); return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16); } function f(level, left, width, type, title) { levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title}); } function samples(n) { return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples'; } function pct(a, b) { return a >= b ? '100' : (100 * a / b).toFixed(2); } function findFrame(frames, x) { let left = 0; let right = frames.length - 1; while (left <= right) { const mid = (left + right) >>> 1; const f = frames[mid]; if (f.left > x) { right = mid - 1; } else if (f.left + f.width <= x) { left = mid + 1; } else { return f; } } if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left]; if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right]; return null; } function search(r) { if (r && (r = prompt('Enter regexp to search:', '')) === null) { return; } pattern = r ? RegExp(r) : undefined; const matched = render(root, rootLevel); document.getElementById('matchval').textContent = pct(matched, root.width) + '%'; document.getElementById('match').style.display = r ? 'inherit' : 'none'; } function render(newRoot, newLevel) { if (root) { c.fillStyle = '#ffffff'; c.fillRect(0, 0, canvasWidth, canvasHeight); } root = newRoot || levels[0][0]; rootLevel = newLevel || 0; px = canvasWidth / root.width; const x0 = root.left; const x1 = x0 + root.width; const marked = []; function mark(f) { return marked[f.left] >= f.width || (marked[f.left] = f.width); } function totalMarked() { let total = 0; let left = 0; Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) { if (+x >= left) { total += marked[x]; left = +x + marked[x]; } }); return total; } function drawFrame(f, y, alpha) { if (f.left < x1 && f.left + f.width > x0) { c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color; c.fillRect((f.left - x0) * px, y, f.width * px, 15); if (f.width * px >= 21) { const chars = Math.floor(f.width * px / 7); const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..'; c.fillStyle = '#000000'; c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6); } if (alpha) { c.fillStyle = 'rgba(255, 255, 255, 0.5)'; c.fillRect((f.left - x0) * px, y, f.width * px, 15); } } } for (let h = 0; h < levels.length; h++) { const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16; const frames = levels[h]; for (let i = 0; i < frames.length; i++) { drawFrame(frames[i], y, h < rootLevel); } } return totalMarked(); } canvas.onmousemove = function() { const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16); if (h >= 0 && h < levels.length) { const f = findFrame(levels[h], event.offsetX / px + root.left); if (f) { hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px'; hl.style.width = (Math.min(f.width, root.width) * px) + 'px'; hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px'; hl.firstChild.textContent = f.title; hl.style.display = 'block'; canvas.title = f.title + '\n(' + samples(f.width) + ', ' + pct(f.width, levels[0][0].width) + '%)'; canvas.style.cursor = 'pointer'; canvas.onclick = function() { if (f != root) { render(f, h); canvas.onmousemove(); } }; status.textContent = 'Function: ' + canvas.title; return; } } canvas.onmouseout(); } canvas.onmouseout = function() { hl.style.display = 'none'; status.textContent = '\xa0'; canvas.title = ''; canvas.style.cursor = ''; canvas.onclick = ''; } document.getElementById('reverse').onclick = function() { reverse = !reverse; render(); } document.getElementById('search').onclick = function() { search(true); } document.getElementById('reset').onclick = function() { search(false); } window.onkeydown = function() { if (event.ctrlKey && event.keyCode === 70) { event.preventDefault(); search(true); } else if (event.keyCode === 27) { search(false); } } f(0,0,4864,4,'all') f(1,0,1,4,'.annobin___pthread_cond_signal.start') f(1,1,628,4,'.annobin___pthread_cond_timedwait.start') f(1,629,129,0,'TestByteArrayCopy.main') f(2,629,129,0,'java/util/Arrays.copyOf') f(3,629,129,0,'java/util/Arrays.copyOf') f(4,629,6,0,'java/lang/System.arraycopy') f(5,629,6,4,'JVM_ArrayCopy') f(6,629,6,3,'ObjArrayKlass::copy_array(arrayOopDesc*, int, arrayOopDesc*, int, int, Thread*)') f(7,629,6,3,'ObjArrayKlass::do_copy(arrayOopDesc*, unsigned long, arrayOopDesc*, unsigned long, int, Thread*) [clone .constprop.124]') f(8,629,3,4,'aci_CopyRight') f(8,632,3,3,'bool AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<36225142ul, G1BarrierSet>, (AccessInternal::BarrierType)8, 36225142ul>::oop_access_barrier<HeapWord>(arrayOopDesc*, unsigned long, HeapWord*, arrayOopDesc*, unsigned long, HeapWord*, unsigned long)') f(9,632,3,3,'G1BarrierSet::write_ref_array_pre(unsigned int*, unsigned long, bool)') f(4,635,93,0,'java/lang/reflect/Array.newInstance') f(5,635,93,0,'java/lang/reflect/Array.newArray') f(6,635,6,4,'JVM_NewArray') f(7,635,6,3,'Reflection::reflect_new_array(oopDesc*, int, Thread*)') f(8,635,6,3,'InstanceKlass::allocate_objArray(int, int, Thread*)') f(9,635,6,3,'CollectedHeap::array_allocate(Klass*, int, int, bool, Thread*)') f(10,635,6,3,'MemAllocator::allocate() const') f(11,635,6,4,'__memset_avx2_erms') f(6,641,87,4,'__pthread_cond_wait') f(4,728,30,4,'oop_disjoint_arraycopy') f(1,758,1,4,'[not_walkable_Java]') f(2,758,1,3,'G1BarrierSet::invalidate(MemRegion)') f(3,758,1,3,'PtrQueue::enqueue_known_active(void*)') f(1,759,8,4,'[unknown]') f(2,759,8,4,'clock_gettime@@GLIBC_2.17') f(3,760,7,4,'__vdso_clock_gettime') f(1,767,1,4,'[unknown_Java]') f(2,767,1,3,'G1BarrierSet::invalidate(MemRegion)') f(3,767,1,3,'PtrQueue::enqueue_known_active(void*)') f(1,768,132,4,'__GI___pthread_timedjoin_ex') f(1,900,1249,4,'__pthread_cond_wait') f(1,2149,1028,4,'do_futex_wait.constprop.1') f(1,3177,132,0,'java/lang/ref/Finalizer$FinalizerThread.run') f(2,3177,132,0,'java/lang/ref/ReferenceQueue.remove') f(3,3177,132,0,'java/lang/ref/ReferenceQueue.remove') f(4,3177,132,0,'java/lang/Object.wait') f(5,3177,132,4,'__pthread_cond_wait') f(1,3309,132,0,'java/lang/ref/Reference$ReferenceHandler.run') f(2,3309,132,0,'java/lang/ref/Reference.processPendingReferences') f(3,3309,132,0,'java/lang/ref/Reference.waitForReferencePendingList') f(4,3309,132,4,'__pthread_cond_wait') f(1,3441,132,0,'jdk/internal/misc/InnocuousThread.run') f(2,3441,132,0,'java/lang/Thread.run') f(3,3441,132,0,'jdk/internal/ref/CleanerImpl.run') f(4,3441,132,0,'java/lang/ref/ReferenceQueue.remove') f(5,3441,132,0,'java/lang/Object.wait') f(6,3441,132,4,'.annobin___pthread_cond_timedwait.start') f(1,3573,1291,4,'start_thread') f(2,3573,1291,4,'thread_native_entry(Thread*)') f(3,3573,1291,3,'Thread::call_run()') f(4,3573,398,3,'ConcurrentGCThread::run()') f(5,3573,398,3,'G1ConcurrentRefineThread::run_service()') f(6,3573,398,3,'DirtyCardQueueSet::refine_completed_buffer_concurrently(unsigned int, unsigned long)') f(7,3576,395,4,'.annobin__ZN8G1RemSet24refine_card_concurrentlyEPaj.start') f(8,3597,371,4,'.annobin__ZN10HeapRegion32oops_on_card_seq_iterate_carefulILb0E28G1ConcurrentRefineOopClosureEEb9MemRegionPT0_.start') f(9,3597,48,4,'.annobin__ZN28OopOopIterateBoundedDispatchI28G1ConcurrentRefineOopClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') f(10,3616,13,3,'BitMap::par_at_put(unsigned long, bool)') f(10,3629,16,3,'OtherRegionsTable::add_reference(void*, unsigned int)') f(9,3645,166,3,'OtherRegionsTable::add_reference(void*, unsigned int)') f(9,3811,157,3,'void G1ConcurrentRefineOopClosure::do_oop_work<unsigned int>(unsigned int*)') f(8,3968,1,4,'.annobin__ZN28OopOopIterateBoundedDispatchI28G1ConcurrentRefineOopClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') f(8,3969,1,3,'G1CollectedHeap::is_obj_dead(oopDesc*, HeapRegion const*) const') f(8,3970,1,3,'G1HotCardCache::insert(signed char*)') f(4,3971,892,3,'GangWorker::loop()') f(5,3971,2,4,'.annobin__ZN14G1CMRemarkTask4workEj.start') f(6,3971,2,3,'G1CMTask::do_marking_step(double, bool, bool)') f(7,3971,2,4,'SpinPause') f(5,3973,1,4,'.annobin__ZN21ParallelSPCleanupTask4workEj.start') f(6,3973,1,3,'Threads::possibly_parallel_threads_do(bool, ThreadClosure*)') f(7,3973,1,3,'JavaThread::nmethods_do(CodeBlobClosure*)') f(5,3974,2,3,'G1CMConcurrentMarkingTask::work(unsigned int)') f(6,3974,2,3,'G1CMTask::do_marking_step(double, bool, bool)') f(7,3974,1,4,'SpinPause') f(7,3975,1,4,'__GI_sched_yield') f(5,3976,2,3,'G1ClearBitMapTask::work(unsigned int)') f(6,3976,2,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') f(7,3976,2,4,'.annobin__ZN17G1ClearBitMapTask22G1ClearBitmapHRClosure14do_heap_regionEP10HeapRegion.start') f(8,3976,2,3,'G1CMBitMap::clear_range(MemRegion)') f(9,3976,2,4,'__memset_avx2_erms') f(5,3978,856,3,'G1ParTask::work(unsigned int)') f(6,3978,1,3,'G1ParEvacuateFollowersClosure::do_void()') f(7,3978,1,3,'GenericTaskQueue<StarTask, (MemoryType)5, 131072u>::pop_global(StarTask volatile&)') f(6,3979,91,3,'G1RemSet::oops_into_collection_set_do(G1ParScanThreadState*, unsigned int)') f(7,3979,91,3,'G1RemSet::update_rem_set(G1ParScanThreadState*, unsigned int)') f(8,3979,91,4,'.annobin__ZN15G1CollectedHeap26iterate_dirty_card_closureEP21CardTableEntryClosurej.start') f(9,3979,91,3,'DirtyCardQueueSet::apply_closure_to_completed_buffer(CardTableEntryClosure*, unsigned int, unsigned long, bool)') f(10,3979,2,3,'G1ParScanThreadState::trim_queue_partially()') f(10,3981,89,3,'G1RefineCardClosure::do_card_ptr(signed char*, unsigned int)') f(11,3981,1,3,'G1CardTable::mark_card_deferred(unsigned long)') f(11,3982,64,3,'G1ParScanThreadState::trim_queue_partially()') f(12,4045,1,3,'CompositeElapsedCounterSource::now()') f(13,4045,1,3,'os::elapsed_counter()') f(11,4046,24,3,'G1RemSet::refine_card_during_gc(signed char*, G1ScanObjsDuringUpdateRSClosure*) [clone .part.136]') f(12,4046,24,4,'.annobin__ZN10HeapRegion32oops_on_card_seq_iterate_carefulILb1E31G1ScanObjsDuringUpdateRSClosureEEb9MemRegionPT0_.start') f(13,4046,10,3,'OverflowTaskQueue<StarTask, (MemoryType)5, 131072u>::push(StarTask) [clone .constprop.567]') f(13,4056,12,3,'void G1ScanObjsDuringUpdateRSClosure::do_oop_work<unsigned int>(unsigned int*)') f(13,4068,2,3,'void OopOopIterateBoundedDispatch<G1ScanObjsDuringUpdateRSClosure>::Table::oop_oop_iterate_bounded<ObjArrayKlass, unsigned int>(G1ScanObjsDuringUpdateRSClosure*, oopDesc*, Klass*, MemRegion)') f(6,4070,761,3,'G1RemSet::scan_rem_set(G1ParScanThreadState*, unsigned int)') f(7,4070,761,3,'G1CollectionSet::iterate_from(HeapRegionClosure*, unsigned int, unsigned int) const') f(8,4070,761,3,'G1ScanRSForRegionClosure::do_heap_region(HeapRegion*)') f(9,4070,5,3,'G1ParScanThreadState::trim_queue_partially()') f(9,4075,2,3,'G1ScanRSForRegionClosure::claim_card(unsigned long, unsigned int)') f(9,4077,754,3,'G1ScanRSForRegionClosure::scan_rem_set_roots(HeapRegion*)') f(10,4081,1,4,'.annobin__ZN28OopOopIterateBoundedDispatchI29G1ScanObjsDuringScanRSClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') f(10,4082,25,3,'G1CardTable::mark_card_deferred(unsigned long)') f(10,4107,517,3,'G1ParScanThreadState::trim_queue_partially()') f(11,4621,2,3,'CompositeElapsedCounterSource::now()') f(12,4622,1,3,'os::elapsed_counter()') f(11,4623,1,3,'PtrQueue::enqueue_known_active(void*)') f(10,4624,2,3,'HeapRegionRemSetIterator::fine_has_next(unsigned long&)') f(10,4626,14,3,'HeapRegionRemSetIterator::has_next(unsigned long&)') f(11,4631,9,3,'HeapRegionRemSetIterator::fine_has_next(unsigned long&)') f(10,4640,191,3,'bool HeapRegion::oops_on_card_seq_iterate_careful<true, G1ScanObjsDuringScanRSClosure>(MemRegion, G1ScanObjsDuringScanRSClosure*)') f(11,4641,13,4,'.annobin__ZN28OopOopIterateBoundedDispatchI29G1ScanObjsDuringScanRSClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') f(11,4654,112,4,'.annobin__ZN29G1ScanObjsDuringScanRSClosure11do_oop_workIjEEvPT_.start') f(11,4766,65,3,'OverflowTaskQueue<StarTask, (MemoryType)5, 131072u>::push(StarTask) [clone .constprop.567]') f(6,4831,3,3,'G1RootProcessor::evacuate_roots(G1ParScanThreadState*, unsigned int)') f(7,4831,3,3,'G1RootProcessor::process_java_roots(G1RootClosures*, G1GCPhaseTimes*, unsigned int)') f(8,4831,1,3,'ClassLoaderDataGraph::roots_cld_do(CLDClosure*, CLDClosure*)') f(9,4831,1,3,'G1CLDScanClosure::do_cld(ClassLoaderData*)') f(10,4831,1,3,'ClassLoaderData::ChunkedHandleList::oops_do(OopClosure*)') f(11,4831,1,4,'.annobin__ZN16G1ParCopyClosureIL9G1Barrier1EL6G1Mark1EE6do_oopEPP7oopDesc.start') f(12,4831,1,4,'__memmove_avx_unaligned_erms') f(8,4832,2,3,'Threads::possibly_parallel_oops_do(bool, OopClosure*, CodeBlobClosure*)') f(9,4832,1,3,'CodeCacheSweeperThread::oops_do(OopClosure*, CodeBlobClosure*)') f(10,4832,1,3,'JavaThread::oops_do(OopClosure*, CodeBlobClosure*)') f(11,4832,1,3,'G1ParCopyClosure<(G1Barrier)0, (G1Mark)1>::do_oop(oopDesc**)') f(12,4832,1,4,'__memmove_avx_unaligned_erms') f(9,4833,1,3,'JavaThread::oops_do(OopClosure*, CodeBlobClosure*)') f(10,4833,1,3,'JNIHandleBlock::oops_do(OopClosure*)') f(11,4833,1,3,'G1ParCopyClosure<(G1Barrier)0, (G1Mark)1>::do_oop(oopDesc**)') f(12,4833,1,3,'G1ParScanThreadState::copy_to_survivor_space(InCSetState, oopDesc*, markOopDesc*)') f(5,4834,23,3,'G1RebuildRemSetTask::work(unsigned int)') f(6,4834,23,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') f(7,4834,23,3,'G1RebuildRemSetTask::G1RebuildRemSetHeapRegionClosure::do_heap_region(HeapRegion*)') f(8,4834,7,4,'.annobin__ZN22G1RebuildRemSetClosure11do_oop_workIjEEvPT_.start') f(8,4841,5,4,'.annobin__ZN28OopOopIterateBoundedDispatchI22G1RebuildRemSetClosureE5Table23oop_oop_iterate_boundedI13ObjArrayKlassjEEvPS0_P7oopDescP5Klass9MemRegion.start') f(9,4845,1,3,'BitMap::par_at_put(unsigned long, bool)') f(8,4846,11,3,'OtherRegionsTable::add_reference(void*, unsigned int)') f(5,4857,6,3,'G1ReclaimEmptyRegionsTask::work(unsigned int)') f(6,4857,6,3,'HeapRegionManager::par_iterate(HeapRegionClosure*, HeapRegionClaimer*, unsigned int) const') f(7,4862,1,4,'.annobin__ZN25G1ReclaimEmptyRegionsTask28G1ReclaimEmptyRegionsClosure14do_heap_regionEP10HeapRegion.start') f(4,4863,1,3,'VMThread::run()') f(5,4863,1,3,'VMThread::loop()') f(6,4863,1,3,'SafepointSynchronize::begin()') render(); </script></body></html>
View Attachment As Raw
Actions:
View
Attachments on
bug 1862163
:
1710962
|
1710967
|
1710981
|
1710982
|
1710983
|
1710985
|
1733753
|
1733754
|
1733828
|
1734031
|
1837207
|
1837208
|
1838349
|
1847239
| 1847240