Skip to content

Commit 749be7e

Browse files
committedJul 16, 2020
8247808: Move JVMTI strong oops to OopStorage
Remove JVMTI oops_do calls from JVMTI and GCs Reviewed-by: sspitsyn, stefank, zgu, dholmes, iklam
1 parent 1f5e21a commit 749be7e

24 files changed

+18
-133
lines changed
 

‎src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ G1GCPhaseTimes::G1GCPhaseTimes(STWGCTimer* gc_timer, uint max_gc_threads) :
6262
_gc_par_phases[ObjectSynchronizerRoots] = new WorkerDataArray<double>("ObjectSynchronizerRoots", "ObjectSynchronizer Roots (ms):", max_gc_threads);
6363
_gc_par_phases[ManagementRoots] = new WorkerDataArray<double>("ManagementRoots", "Management Roots (ms):", max_gc_threads);
6464
_gc_par_phases[CLDGRoots] = new WorkerDataArray<double>("CLDGRoots", "CLDG Roots (ms):", max_gc_threads);
65-
_gc_par_phases[JVMTIRoots] = new WorkerDataArray<double>("JVMTIRoots", "JVMTI Roots (ms):", max_gc_threads);
6665
AOT_ONLY(_gc_par_phases[AOTCodeRoots] = new WorkerDataArray<double>("AOTCodeRoots", "AOT Root Scan (ms):", max_gc_threads);)
6766
_gc_par_phases[CMRefRoots] = new WorkerDataArray<double>("CMRefRoots", "CM RefProcessor Roots (ms):", max_gc_threads);
6867

‎src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ class G1GCPhaseTimes : public CHeapObj<mtGC> {
5252
ObjectSynchronizerRoots,
5353
ManagementRoots,
5454
CLDGRoots,
55-
JVMTIRoots,
5655
AOT_ONLY(AOTCodeRoots COMMA)
5756
CMRefRoots,
5857
// For every OopStorage there will be one element in the enum, starting with

‎src/hotspot/share/gc/g1/g1RootProcessor.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,6 @@ void G1RootProcessor::process_vm_roots(G1RootClosures* closures,
203203
}
204204
}
205205

206-
{
207-
G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::JVMTIRoots, worker_id);
208-
if (_process_strong_tasks.try_claim_task(G1RP_PS_jvmti_oops_do)) {
209-
JvmtiExport::oops_do(strong_roots);
210-
}
211-
}
212-
213206
#if INCLUDE_AOT
214207
if (UseAOT) {
215208
G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::AOTCodeRoots, worker_id);

‎src/hotspot/share/gc/parallel/psParallelCompact.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -2024,10 +2024,6 @@ static void mark_from_roots_work(ParallelRootType::Value root_type, uint worker_
20242024
Management::oops_do(&mark_and_push_closure);
20252025
break;
20262026

2027-
case ParallelRootType::jvmti:
2028-
JvmtiExport::oops_do(&mark_and_push_closure);
2029-
break;
2030-
20312027
case ParallelRootType::class_loader_data:
20322028
{
20332029
CLDToOopClosure cld_closure(&mark_and_push_closure, ClassLoaderData::_claim_strong);
@@ -2241,7 +2237,6 @@ void PSParallelCompact::adjust_roots(ParCompactionManager* cm) {
22412237
Threads::oops_do(&oop_closure, NULL);
22422238
ObjectSynchronizer::oops_do(&oop_closure);
22432239
Management::oops_do(&oop_closure);
2244-
JvmtiExport::oops_do(&oop_closure);
22452240
OopStorageSet::strong_oops_do(&oop_closure);
22462241
CLDToOopClosure cld_closure(&oop_closure, ClassLoaderData::_claim_strong);
22472242
ClassLoaderDataGraph::cld_do(&cld_closure);

‎src/hotspot/share/gc/parallel/psRootType.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class ParallelRootType : public AllStatic {
3838
object_synchronizer,
3939
management,
4040
class_loader_data,
41-
jvmti,
4241
code_cache,
4342
//"threads" are handled in parallel as a special case
4443
sentinel

‎src/hotspot/share/gc/parallel/psScavenge.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,6 @@ static void scavenge_roots_work(ParallelRootType::Value root_type, uint worker_i
112112
Management::oops_do(&roots_closure);
113113
break;
114114

115-
case ParallelRootType::jvmti:
116-
JvmtiExport::oops_do(&roots_closure);
117-
break;
118-
119115
case ParallelRootType::code_cache:
120116
{
121117
MarkingCodeBlobClosure code_closure(&roots_to_old_closure, CodeBlobToOopClosure::FixRelocations);

‎src/hotspot/share/gc/shared/genCollectedHeap.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,6 @@ void GenCollectedHeap::process_roots(StrongRootsScope* scope,
832832
if (_process_strong_tasks->try_claim_task(GCH_PS_Management_oops_do)) {
833833
Management::oops_do(strong_roots);
834834
}
835-
if (_process_strong_tasks->try_claim_task(GCH_PS_jvmti_oops_do)) {
836-
JvmtiExport::oops_do(strong_roots);
837-
}
838835
#if INCLUDE_AOT
839836
if (UseAOT && _process_strong_tasks->try_claim_task(GCH_PS_aot_oops_do)) {
840837
AOTLoader::oops_do(strong_roots);

‎src/hotspot/share/gc/shared/genCollectedHeap.hpp

-2
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,9 @@ class GenCollectedHeap : public CollectedHeap {
107107
enum GCH_strong_roots_tasks {
108108
GCH_PS_Universe_oops_do,
109109
GCH_PS_ObjectSynchronizer_oops_do,
110-
GCH_PS_FlatProfiler_oops_do,
111110
GCH_PS_Management_oops_do,
112111
GCH_PS_OopStorageSet_oops_do,
113112
GCH_PS_ClassLoaderDataGraph_oops_do,
114-
GCH_PS_jvmti_oops_do,
115113
GCH_PS_CodeCache_oops_do,
116114
AOT_ONLY(GCH_PS_aot_oops_do COMMA)
117115
GCH_PS_younger_gens,

‎src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class outputStream;
4949
f(CNT_PREFIX ## ObjectSynchronizerRoots, DESC_PREFIX "Synchronizer Roots") \
5050
f(CNT_PREFIX ## ManagementRoots, DESC_PREFIX "Management Roots") \
5151
f(CNT_PREFIX ## CLDGRoots, DESC_PREFIX "CLDG Roots") \
52-
f(CNT_PREFIX ## JVMTIRoots, DESC_PREFIX "JVMTI Roots") \
5352
f(CNT_PREFIX ## StringDedupTableRoots, DESC_PREFIX "Dedup Table Roots") \
5453
f(CNT_PREFIX ## StringDedupQueueRoots, DESC_PREFIX "Dedup Queue Roots") \
5554
f(CNT_PREFIX ## FinishQueues, DESC_PREFIX "Finish Queues") \

‎src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,13 @@ void ShenandoahSerialRoot::oops_do(OopClosure* cl, uint worker_id) {
5757
ShenandoahSerialRoots::ShenandoahSerialRoots(ShenandoahPhaseTimings::Phase phase) :
5858
_universe_root(&Universe::oops_do, phase, ShenandoahPhaseTimings::UniverseRoots),
5959
_object_synchronizer_root(&ObjectSynchronizer::oops_do, phase, ShenandoahPhaseTimings::ObjectSynchronizerRoots),
60-
_management_root(&Management::oops_do, phase, ShenandoahPhaseTimings::ManagementRoots),
61-
_jvmti_root(&JvmtiExport::oops_do, phase, ShenandoahPhaseTimings::JVMTIRoots) {
60+
_management_root(&Management::oops_do, phase, ShenandoahPhaseTimings::ManagementRoots) {
6261
}
6362

6463
void ShenandoahSerialRoots::oops_do(OopClosure* cl, uint worker_id) {
6564
_universe_root.oops_do(cl, worker_id);
6665
_object_synchronizer_root.oops_do(cl, worker_id);
6766
_management_root.oops_do(cl, worker_id);
68-
_jvmti_root.oops_do(cl, worker_id);
6967
}
7068

7169
ShenandoahWeakSerialRoot::ShenandoahWeakSerialRoot(ShenandoahWeakSerialRoot::WeakOopsDo weak_oops_do,

‎src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ class ShenandoahSerialRoots {
5454
ShenandoahSerialRoot _universe_root;
5555
ShenandoahSerialRoot _object_synchronizer_root;
5656
ShenandoahSerialRoot _management_root;
57-
ShenandoahSerialRoot _jvmti_root;
5857
public:
5958
ShenandoahSerialRoots(ShenandoahPhaseTimings::Phase phase);
6059
void oops_do(OopClosure* cl, uint worker_id);

‎src/hotspot/share/gc/shenandoah/shenandoahRootVerifier.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ void ShenandoahRootVerifier::oops_do(OopClosure* oops) {
7878
shenandoah_assert_safepoint();
7979
Universe::oops_do(oops);
8080
Management::oops_do(oops);
81-
JvmtiExport::oops_do(oops);
8281
ObjectSynchronizer::oops_do(oops);
8382
}
8483

@@ -124,7 +123,6 @@ void ShenandoahRootVerifier::roots_do(OopClosure* oops) {
124123

125124
Universe::oops_do(oops);
126125
Management::oops_do(oops);
127-
JvmtiExport::oops_do(oops);
128126
JNIHandles::oops_do(oops);
129127
ObjectSynchronizer::oops_do(oops);
130128
OopStorageSet::vm_global()->oops_do(oops);
@@ -152,7 +150,6 @@ void ShenandoahRootVerifier::strong_roots_do(OopClosure* oops) {
152150

153151
Universe::oops_do(oops);
154152
Management::oops_do(oops);
155-
JvmtiExport::oops_do(oops);
156153
JNIHandles::oops_do(oops);
157154
ObjectSynchronizer::oops_do(oops);
158155
OopStorageSet::vm_global()->oops_do(oops);

‎src/hotspot/share/gc/z/zRootsIterator.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ static const ZStatSubPhase ZSubPhasePauseRootsTeardown("Pause Roots Teardown");
6161
static const ZStatSubPhase ZSubPhasePauseRootsUniverse("Pause Roots Universe");
6262
static const ZStatSubPhase ZSubPhasePauseRootsObjectSynchronizer("Pause Roots ObjectSynchronizer");
6363
static const ZStatSubPhase ZSubPhasePauseRootsManagement("Pause Roots Management");
64-
static const ZStatSubPhase ZSubPhasePauseRootsJVMTIExport("Pause Roots JVMTIExport");
6564
static const ZStatSubPhase ZSubPhasePauseRootsJVMTIWeakExport("Pause Roots JVMTIWeakExport");
6665
static const ZStatSubPhase ZSubPhasePauseRootsVMThread("Pause Roots VM Thread");
6766
static const ZStatSubPhase ZSubPhasePauseRootsJavaThreads("Pause Roots Java Threads");
@@ -198,7 +197,6 @@ ZRootsIterator::ZRootsIterator(bool visit_jvmti_weak_export) :
198197
_universe(this),
199198
_object_synchronizer(this),
200199
_management(this),
201-
_jvmti_export(this),
202200
_jvmti_weak_export(this),
203201
_vm_thread(this),
204202
_java_threads(this),
@@ -240,11 +238,6 @@ void ZRootsIterator::do_management(ZRootsIteratorClosure* cl) {
240238
Management::oops_do(cl);
241239
}
242240

243-
void ZRootsIterator::do_jvmti_export(ZRootsIteratorClosure* cl) {
244-
ZStatTimer timer(ZSubPhasePauseRootsJVMTIExport);
245-
JvmtiExport::oops_do(cl);
246-
}
247-
248241
void ZRootsIterator::do_jvmti_weak_export(ZRootsIteratorClosure* cl) {
249242
ZStatTimer timer(ZSubPhasePauseRootsJVMTIWeakExport);
250243
AlwaysTrueClosure always_alive;
@@ -273,7 +266,6 @@ void ZRootsIterator::oops_do(ZRootsIteratorClosure* cl) {
273266
_universe.oops_do(cl);
274267
_object_synchronizer.oops_do(cl);
275268
_management.oops_do(cl);
276-
_jvmti_export.oops_do(cl);
277269
_vm_thread.oops_do(cl);
278270
_java_threads.oops_do(cl);
279271
if (!ClassUnloading) {

‎src/hotspot/share/gc/z/zRootsIterator.hpp

-2
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ class ZRootsIterator {
112112
void do_universe(ZRootsIteratorClosure* cl);
113113
void do_object_synchronizer(ZRootsIteratorClosure* cl);
114114
void do_management(ZRootsIteratorClosure* cl);
115-
void do_jvmti_export(ZRootsIteratorClosure* cl);
116115
void do_jvmti_weak_export(ZRootsIteratorClosure* cl);
117116
void do_vm_thread(ZRootsIteratorClosure* cl);
118117
void do_java_threads(ZRootsIteratorClosure* cl);
@@ -121,7 +120,6 @@ class ZRootsIterator {
121120
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_universe> _universe;
122121
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_object_synchronizer> _object_synchronizer;
123122
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_management> _management;
124-
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_export> _jvmti_export;
125123
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_weak_export> _jvmti_weak_export;
126124
ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_vm_thread> _vm_thread;
127125
ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_java_threads> _java_threads;

‎src/hotspot/share/jfr/leakprofiler/chains/rootSetClosure.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include "memory/universe.hpp"
3838
#include "oops/access.inline.hpp"
3939
#include "oops/oop.inline.hpp"
40-
#include "prims/jvmtiExport.hpp"
4140
#include "runtime/synchronizer.hpp"
4241
#include "runtime/thread.hpp"
4342
#include "services/management.hpp"
@@ -75,7 +74,6 @@ void RootSetClosure<Delegate>::process() {
7574
Threads::oops_do(this, NULL);
7675
ObjectSynchronizer::oops_do(this);
7776
Universe::oops_do(this);
78-
JvmtiExport::oops_do(this);
7977
OopStorageSet::strong_oops_do(this);
8078
Management::oops_do(this);
8179
AOTLoader::oops_do(this);

‎src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.cpp

-13
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ class ReferenceToRootClosure : public StackObj {
9999
bool do_object_synchronizer_roots();
100100
bool do_universe_roots();
101101
bool do_oop_storage_roots();
102-
bool do_jvmti_roots();
103102
bool do_management_roots();
104103
bool do_string_table_roots();
105104
bool do_aot_loader_roots();
@@ -165,13 +164,6 @@ bool ReferenceToRootClosure::do_oop_storage_roots() {
165164
return false;
166165
}
167166

168-
bool ReferenceToRootClosure::do_jvmti_roots() {
169-
assert(!complete(), "invariant");
170-
ReferenceLocateClosure rlc(_callback, OldObjectRoot::_jvmti, OldObjectRoot::_global_jni_handle, NULL);
171-
JvmtiExport::oops_do(&rlc);
172-
return rlc.complete();
173-
}
174-
175167
bool ReferenceToRootClosure::do_management_roots() {
176168
assert(!complete(), "invariant");
177169
ReferenceLocateClosure rlc(_callback, OldObjectRoot::_management, OldObjectRoot::_type_undetermined, NULL);
@@ -211,11 +203,6 @@ bool ReferenceToRootClosure::do_roots() {
211203
return true;
212204
}
213205

214-
if (do_jvmti_roots()) {
215-
_complete = true;
216-
return true;
217-
}
218-
219206
if (do_management_roots()) {
220207
_complete = true;
221208
return true;

‎src/hotspot/share/jfr/leakprofiler/utilities/rootType.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ const char* OldObjectRoot::system_description(System system) {
6060
return "Class Loader Data";
6161
case _management:
6262
return "Management";
63-
case _jvmti:
64-
return "JVMTI";
6563
case _code_cache:
6664
return "Code Cache";
6765
case _aot:

‎src/hotspot/share/jfr/leakprofiler/utilities/rootType.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class OldObjectRoot : public AllStatic {
3939
_object_synchronizer,
4040
_class_loader_data,
4141
_management,
42-
_jvmti,
4342
_code_cache,
4443
_aot,
4544
JVMCI_ONLY(_jvmci COMMA)

‎src/hotspot/share/prims/jvmtiExport.cpp

+8-44
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "code/nmethod.hpp"
3030
#include "code/pcDesc.hpp"
3131
#include "code/scopeDesc.hpp"
32+
#include "gc/shared/oopStorageSet.hpp"
3233
#include "interpreter/interpreter.hpp"
3334
#include "jvmtifiles/jvmtiEnv.hpp"
3435
#include "logging/log.hpp"
@@ -39,6 +40,7 @@
3940
#include "oops/objArrayKlass.hpp"
4041
#include "oops/objArrayOop.hpp"
4142
#include "oops/oop.inline.hpp"
43+
#include "oops/oopHandle.inline.hpp"
4244
#include "prims/jvmtiCodeBlobEvents.hpp"
4345
#include "prims/jvmtiEventController.hpp"
4446
#include "prims/jvmtiEventController.inline.hpp"
@@ -2599,10 +2601,6 @@ void JvmtiExport::clear_detected_exception(JavaThread* thread) {
25992601
}
26002602
}
26012603

2602-
void JvmtiExport::oops_do(OopClosure* f) {
2603-
JvmtiObjectAllocEventCollector::oops_do_for_all_threads(f);
2604-
}
2605-
26062604
void JvmtiExport::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
26072605
JvmtiTagMap::weak_oops_do(is_alive, f);
26082606
}
@@ -2828,8 +2826,11 @@ void JvmtiObjectAllocEventCollector::generate_call_for_allocated() {
28282826
if (_allocated) {
28292827
set_enabled(false);
28302828
for (int i = 0; i < _allocated->length(); i++) {
2831-
oop obj = _allocated->at(i);
2829+
oop obj = _allocated->at(i).resolve();
28322830
_post_callback(JavaThread::current(), obj);
2831+
// Release OopHandle
2832+
_allocated->at(i).release(OopStorageSet::vm_global());
2833+
28332834
}
28342835
delete _allocated, _allocated = NULL;
28352836
}
@@ -2838,48 +2839,11 @@ void JvmtiObjectAllocEventCollector::generate_call_for_allocated() {
28382839
void JvmtiObjectAllocEventCollector::record_allocation(oop obj) {
28392840
assert(is_enabled(), "Object alloc event collector is not enabled");
28402841
if (_allocated == NULL) {
2841-
_allocated = new (ResourceObj::C_HEAP, mtServiceability) GrowableArray<oop>(1, mtServiceability);
2842-
}
2843-
_allocated->push(obj);
2844-
}
2845-
2846-
// GC support.
2847-
void JvmtiObjectAllocEventCollector::oops_do(OopClosure* f) {
2848-
if (_allocated) {
2849-
for(int i = _allocated->length() - 1; i >= 0; i--) {
2850-
if (_allocated->at(i) != NULL) {
2851-
f->do_oop(_allocated->adr_at(i));
2852-
}
2853-
}
2854-
}
2855-
}
2856-
2857-
void JvmtiObjectAllocEventCollector::oops_do_for_all_threads(OopClosure* f) {
2858-
// no-op if jvmti not enabled
2859-
if (!JvmtiEnv::environments_might_exist()) {
2860-
return;
2861-
}
2862-
2863-
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *jthr = jtiwh.next(); ) {
2864-
JvmtiThreadState *state = jthr->jvmti_thread_state();
2865-
if (state != NULL) {
2866-
JvmtiObjectAllocEventCollector *collector;
2867-
collector = state->get_vm_object_alloc_event_collector();
2868-
while (collector != NULL) {
2869-
collector->oops_do(f);
2870-
collector = (JvmtiObjectAllocEventCollector*) collector->get_prev();
2871-
}
2872-
2873-
collector = state->get_sampled_object_alloc_event_collector();
2874-
while (collector != NULL) {
2875-
collector->oops_do(f);
2876-
collector = (JvmtiObjectAllocEventCollector*) collector->get_prev();
2877-
}
2878-
}
2842+
_allocated = new (ResourceObj::C_HEAP, mtServiceability) GrowableArray<OopHandle>(1, mtServiceability);
28792843
}
2844+
_allocated->push(OopHandle(OopStorageSet::vm_global(), obj));
28802845
}
28812846

2882-
28832847
// Disable collection of VMObjectAlloc events
28842848
NoJvmtiVMObjectAllocMark::NoJvmtiVMObjectAllocMark() : _collector(NULL) {
28852849
// a no-op if VMObjectAlloc event is not enabled

‎src/hotspot/share/prims/jvmtiExport.hpp

+2-8
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "memory/allocation.hpp"
3030
#include "memory/iterator.hpp"
3131
#include "oops/oop.hpp"
32+
#include "oops/oopHandle.hpp"
3233
#include "oops/oopsHierarchy.hpp"
3334
#include "runtime/frame.hpp"
3435
#include "runtime/handles.hpp"
@@ -394,7 +395,6 @@ class JvmtiExport : public AllStatic {
394395
static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
395396
static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN;
396397

397-
static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
398398
static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
399399

400400
static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
@@ -491,24 +491,18 @@ class JvmtiDynamicCodeEventCollector : public JvmtiEventCollector {
491491
//
492492
class JvmtiObjectAllocEventCollector : public JvmtiEventCollector {
493493
protected:
494-
GrowableArray<oop>* _allocated; // field to record collected allocated object oop.
494+
GrowableArray<OopHandle>* _allocated; // field to record collected allocated object oop.
495495
bool _enable; // This flag is enabled in constructor if set up in the thread state
496496
// and disabled in destructor before posting event. To avoid
497497
// collection of objects allocated while running java code inside
498498
// agent post_X_object_alloc() event handler.
499499
void (*_post_callback)(JavaThread*, oop); // what callback to use when destroying the collector.
500500

501-
//GC support
502-
void oops_do(OopClosure* f);
503-
504501
friend class JvmtiExport;
505502

506503
// Record allocated object oop.
507504
inline void record_allocation(oop obj);
508505

509-
//GC support
510-
static void oops_do_for_all_threads(OopClosure* f);
511-
512506
public:
513507
JvmtiObjectAllocEventCollector() NOT_JVMTI_RETURN;
514508

0 commit comments

Comments
 (0)
Please sign in to comment.