8266083: Shenandoah: Consolidate dedup/no dedup oop closures · openjdk/jdk@1d9ea3a (original) (raw)

1

1

`/*

`

2

``

`-

`

``

2

`+

`

3

3

` * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

`

4

4

` *

`

5

5

` * This code is free software; you can redistribute it and/or modify it

`

`@@ -75,10 +75,11 @@ class ShenandoahMarkUpdateRefsSuperClosure : public ShenandoahMarkRefsSuperClosu

`

75

75

` };

`

76

76

`};

`

77

77

``

``

78

`+

template

`

78

79

`class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkUpdateRefsSuperClosure {

`

79

80

`private:

`

80

81

`template

`

81

``

`-

inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }

`

``

82

`+

inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }

`

82

83

``

83

84

`public:

`

84

85

`ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

`@@ -89,24 +90,11 @@ class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkUpdateRefsSuperClos

`

89

90

`virtual bool do_metadata() { return false; }

`

90

91

`};

`

91

92

``

92

``

`-

class ShenandoahMarkUpdateRefsDedupClosure : public ShenandoahMarkUpdateRefsSuperClosure {

`

93

``

`-

private:

`

94

``

`-

template

`

95

``

`-

inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }

`

96

``

-

97

``

`-

public:

`

98

``

`-

ShenandoahMarkUpdateRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

99

``

`-

ShenandoahMarkUpdateRefsSuperClosure(q, rp) {}

`

100

``

-

101

``

`-

virtual void do_oop(narrowOop* p) { do_oop_work(p); }

`

102

``

`-

virtual void do_oop(oop* p) { do_oop_work(p); }

`

103

``

`-

virtual bool do_metadata() { return false; }

`

104

``

`-

};

`

105

``

-

``

93

`+

template

`

106

94

`class ShenandoahMarkUpdateRefsMetadataClosure : public ShenandoahMarkUpdateRefsSuperClosure {

`

107

95

`private:

`

108

96

`template

`

109

``

`-

inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }

`

``

97

`+

inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }

`

110

98

``

111

99

`public:

`

112

100

`ShenandoahMarkUpdateRefsMetadataClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

`@@ -117,24 +105,12 @@ class ShenandoahMarkUpdateRefsMetadataClosure : public ShenandoahMarkUpdateRefsS

`

117

105

`virtual bool do_metadata() { return true; }

`

118

106

`};

`

119

107

``

120

``

`-

class ShenandoahMarkUpdateRefsMetadataDedupClosure : public ShenandoahMarkUpdateRefsSuperClosure {

`

121

``

`-

private:

`

122

``

`-

template

`

123

``

`-

inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }

`

124

``

-

125

``

`-

public:

`

126

``

`-

ShenandoahMarkUpdateRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

127

``

`-

ShenandoahMarkUpdateRefsSuperClosure(q, rp) {}

`

128

``

-

129

``

`-

virtual void do_oop(narrowOop* p) { do_oop_work(p); }

`

130

``

`-

virtual void do_oop(oop* p) { do_oop_work(p); }

`

131

``

`-

virtual bool do_metadata() { return true; }

`

132

``

`-

};

`

133

108

``

``

109

`+

template

`

134

110

`class ShenandoahMarkRefsClosure : public ShenandoahMarkRefsSuperClosure {

`

135

111

`private:

`

136

112

`template

`

137

``

`-

inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }

`

``

113

`+

inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }

`

138

114

``

139

115

`public:

`

140

116

`ShenandoahMarkRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

`@@ -145,24 +121,12 @@ class ShenandoahMarkRefsClosure : public ShenandoahMarkRefsSuperClosure {

`

145

121

`virtual bool do_metadata() { return false; }

`

146

122

`};

`

147

123

``

148

``

`-

class ShenandoahMarkRefsDedupClosure : public ShenandoahMarkRefsSuperClosure {

`

149

``

`-

private:

`

150

``

`-

template

`

151

``

`-

inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }

`

152

``

-

153

``

`-

public:

`

154

``

`-

ShenandoahMarkRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

155

``

`-

ShenandoahMarkRefsSuperClosure(q, rp) {};

`

156

``

-

157

``

`-

virtual void do_oop(narrowOop* p) { do_oop_work(p); }

`

158

``

`-

virtual void do_oop(oop* p) { do_oop_work(p); }

`

159

``

`-

virtual bool do_metadata() { return false; }

`

160

``

`-

};

`

161

124

``

``

125

`+

template

`

162

126

`class ShenandoahMarkRefsMetadataClosure : public ShenandoahMarkRefsSuperClosure {

`

163

127

`private:

`

164

128

`template

`

165

``

`-

inline void do_oop_work(T* p) { work<T, NO_DEDUP>(p); }

`

``

129

`+

inline void do_oop_work(T* p) { work<T, STRING_DEDUP>(p); }

`

166

130

``

167

131

`public:

`

168

132

`ShenandoahMarkRefsMetadataClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

`@@ -173,20 +137,6 @@ class ShenandoahMarkRefsMetadataClosure : public ShenandoahMarkRefsSuperClosure

`

173

137

`virtual bool do_metadata() { return true; }

`

174

138

`};

`

175

139

``

176

``

`-

class ShenandoahMarkRefsMetadataDedupClosure : public ShenandoahMarkRefsSuperClosure {

`

177

``

`-

private:

`

178

``

`-

template

`

179

``

`-

inline void do_oop_work(T* p) { work<T, ENQUEUE_DEDUP>(p); }

`

180

``

-

181

``

`-

public:

`

182

``

`-

ShenandoahMarkRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp) :

`

183

``

`-

ShenandoahMarkRefsSuperClosure(q, rp) {};

`

184

``

-

185

``

`-

virtual void do_oop(narrowOop* p) { do_oop_work(p); }

`

186

``

`-

virtual void do_oop(oop* p) { do_oop_work(p); }

`

187

``

`-

virtual bool do_metadata() { return true; }

`

188

``

`-

};

`

189

``

-

190

140

`class ShenandoahUpdateRefsSuperClosure : public BasicOopIterateClosure {

`

191

141

`protected:

`

192

142

` ShenandoahHeap* _heap;

`