< prev index next >

src/hotspot/share/runtime/interfaceSupport.cpp

Print this page
rev 56101 : 8227745: Enable Escape Analysis for better performance when debugging
Reviewed-by: ???

*** 28,37 **** --- 28,38 ---- #include "logging/log.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "runtime/atomic.hpp" #include "runtime/frame.inline.hpp" + #include "runtime/deoptimization.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "runtime/orderAccess.hpp" #include "runtime/os.inline.hpp"
*** 65,74 **** --- 66,78 ---- InterfaceSupport::deoptimizeAll(); } if (ZombieALot) { InterfaceSupport::zombieAll(); } + if (DeoptimizeObjectsALot == 1) { + InterfaceSupport::deoptimizeAllObjects(); + } // do verification AFTER potential deoptimization if (VerifyStack) { InterfaceSupport::verify_stack(); } }
*** 197,206 **** --- 201,211 ---- } // invocation counter for InterfaceSupport::deoptimizeAll/zombieAll functions int deoptimizeAllCounter = 0; int zombieAllCounter = 0; + int deoptimizeAllObjectsCounter = 0; void InterfaceSupport::zombieAll() { // This method is called by all threads when a thread make // transition to VM state (for example, runtime calls). // Divide number of calls by number of threads to avoid
*** 231,240 **** --- 236,262 ---- } } deoptimizeAllCounter++; } + void InterfaceSupport::deoptimizeAllObjects() { + // This method is called by all threads when a thread makes + // transition to VM state (for example, runtime calls). + // Divide number of calls by number of threads to avoid + // dependence of DeoptimizeObjectsALot events frequency on number of threads. + int value = deoptimizeAllObjectsCounter / Threads::number_of_threads(); + if (is_init_completed() && value > DeoptimizeObjectsALotInterval) { + // Revert optimizations based on escape analysis for all compiled frames of all Java threads as + // if objects local to a frame or a thread were escaping. + deoptimizeAllObjectsCounter = 0; + JavaThread* ct = JavaThread::current(); + JVMTIEscapeBarrier eb(ct, true); + eb.deoptimize_objects_all_threads(); + } + deoptimizeAllObjectsCounter++; + } + void InterfaceSupport::stress_derived_pointers() { #ifdef COMPILER2 JavaThread *thread = JavaThread::current(); if (!is_init_completed()) return;
< prev index next >