Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.
/ lanai Public archive

Commit f8596b5

Browse files
author
Kim Barrett
committedJun 23, 2020
8247740: Inline derived CollectedHeap access for G1 and ParallelGC
Added shared helper in CollectedHeap, and inlined for G1 and ParallelGC Reviewed-by: stefank, pliden
1 parent e3eb38f commit f8596b5

9 files changed

+28
-34
lines changed
 

‎src/hotspot/share/gc/epsilon/epsilonHeap.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
2+
* Copyright (c) 2017, 2020, Red Hat, Inc. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -101,10 +101,7 @@ size_t EpsilonHeap::unsafe_max_tlab_alloc(Thread* thr) const {
101101
}
102102

103103
EpsilonHeap* EpsilonHeap::heap() {
104-
CollectedHeap* heap = Universe::heap();
105-
assert(heap != NULL, "Uninitialized access to EpsilonHeap::heap()");
106-
assert(heap->kind() == CollectedHeap::Epsilon, "Not an Epsilon heap");
107-
return (EpsilonHeap*)heap;
104+
return named_heap<EpsilonHeap>(CollectedHeap::Epsilon);
108105
}
109106

110107
HeapWord* EpsilonHeap::allocate_work(size_t size) {

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

-7
Original file line numberDiff line numberDiff line change
@@ -2668,13 +2668,6 @@ void G1CollectedHeap::trace_heap(GCWhen::Type when, const GCTracer* gc_tracer) {
26682668
gc_tracer->report_metaspace_summary(when, metaspace_summary);
26692669
}
26702670

2671-
G1CollectedHeap* G1CollectedHeap::heap() {
2672-
CollectedHeap* heap = Universe::heap();
2673-
assert(heap != NULL, "Uninitialized access to G1CollectedHeap::heap()");
2674-
assert(heap->kind() == CollectedHeap::G1, "Invalid name");
2675-
return (G1CollectedHeap*)heap;
2676-
}
2677-
26782671
void G1CollectedHeap::gc_prologue(bool full) {
26792672
assert(InlineCacheBuffer::is_empty(), "should have cleaned up ICBuffer");
26802673

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -1293,7 +1293,9 @@ class G1CollectedHeap : public CollectedHeap {
12931293

12941294
// Convenience function to be used in situations where the heap type can be
12951295
// asserted to be this type.
1296-
static G1CollectedHeap* heap();
1296+
static G1CollectedHeap* heap() {
1297+
return named_heap<G1CollectedHeap>(CollectedHeap::G1);
1298+
}
12971299

12981300
void set_region_short_lived_locked(HeapRegion* hr);
12991301
// add appropriate methods for any other surv rate groups

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

-7
Original file line numberDiff line numberDiff line change
@@ -689,13 +689,6 @@ void ParallelScavengeHeap::trace_heap(GCWhen::Type when, const GCTracer* gc_trac
689689
gc_tracer->report_metaspace_summary(when, metaspace_summary);
690690
}
691691

692-
ParallelScavengeHeap* ParallelScavengeHeap::heap() {
693-
CollectedHeap* heap = Universe::heap();
694-
assert(heap != NULL, "Uninitialized access to ParallelScavengeHeap::heap()");
695-
assert(heap->kind() == CollectedHeap::Parallel, "Invalid name");
696-
return (ParallelScavengeHeap*)heap;
697-
}
698-
699692
CardTableBarrierSet* ParallelScavengeHeap::barrier_set() {
700693
return barrier_set_cast<CardTableBarrierSet>(BarrierSet::barrier_set());
701694
}

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ class ParallelScavengeHeap : public CollectedHeap {
126126

127127
static PSGCAdaptivePolicyCounters* gc_policy_counters() { return _gc_policy_counters; }
128128

129-
static ParallelScavengeHeap* heap();
129+
static ParallelScavengeHeap* heap() {
130+
return named_heap<ParallelScavengeHeap>(CollectedHeap::Parallel);
131+
}
130132

131133
CardTableBarrierSet* barrier_set();
132134
PSCardTable* card_table();

‎src/hotspot/share/gc/serial/serialHeap.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -31,10 +31,7 @@
3131
#include "services/memoryManager.hpp"
3232

3333
SerialHeap* SerialHeap::heap() {
34-
CollectedHeap* heap = Universe::heap();
35-
assert(heap != NULL, "Uninitialized access to SerialHeap::heap()");
36-
assert(heap->kind() == CollectedHeap::Serial, "Invalid name");
37-
return static_cast<SerialHeap*>(heap);
34+
return named_heap<SerialHeap>(CollectedHeap::Serial);
3835
}
3936

4037
SerialHeap::SerialHeap() :

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

+15
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "gc/shared/gcWhen.hpp"
3030
#include "gc/shared/verifyOption.hpp"
3131
#include "memory/allocation.hpp"
32+
#include "memory/universe.hpp"
3233
#include "runtime/handles.hpp"
3334
#include "runtime/perfData.hpp"
3435
#include "runtime/safepoint.hpp"
@@ -177,6 +178,20 @@ class CollectedHeap : public CHeapObj<mtInternal> {
177178
Shenandoah
178179
};
179180

181+
protected:
182+
// Get a pointer to the derived heap object. Used to implement
183+
// derived class heap() functions rather than being called directly.
184+
template<typename T>
185+
static T* named_heap(Name kind) {
186+
CollectedHeap* heap = Universe::heap();
187+
assert(heap != NULL, "Uninitialized heap");
188+
assert(kind == heap->kind(), "Heap kind %u should be %u",
189+
static_cast<uint>(heap->kind()), static_cast<uint>(kind));
190+
return static_cast<T*>(heap);
191+
}
192+
193+
public:
194+
180195
static inline size_t filler_array_max_size() {
181196
return _filler_array_max_size;
182197
}

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -1199,10 +1199,8 @@ void GenCollectedHeap::save_marks() {
11991199
}
12001200

12011201
GenCollectedHeap* GenCollectedHeap::heap() {
1202-
CollectedHeap* heap = Universe::heap();
1203-
assert(heap != NULL, "Uninitialized access to GenCollectedHeap::heap()");
1204-
assert(heap->kind() == CollectedHeap::Serial, "Invalid name");
1205-
return (GenCollectedHeap*) heap;
1202+
// SerialHeap is the only subtype of GenCollectedHeap.
1203+
return named_heap<GenCollectedHeap>(CollectedHeap::Serial);
12061204
}
12071205

12081206
#if INCLUDE_SERIALGC

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@
4141
#include "utilities/align.hpp"
4242

4343
ZCollectedHeap* ZCollectedHeap::heap() {
44-
CollectedHeap* heap = Universe::heap();
45-
assert(heap != NULL, "Uninitialized access to ZCollectedHeap::heap()");
46-
assert(heap->kind() == CollectedHeap::Z, "Invalid name");
47-
return (ZCollectedHeap*)heap;
44+
return named_heap<ZCollectedHeap>(CollectedHeap::Z);
4845
}
4946

5047
ZCollectedHeap::ZCollectedHeap() :

0 commit comments

Comments
 (0)
This repository has been archived.