1 /* |
1 /* |
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
36 class HeapRegion; |
36 class HeapRegion; |
37 class HeapRegionRemSetIterator; |
37 class HeapRegionRemSetIterator; |
38 class PosParPRT; |
38 class PosParPRT; |
39 class SparsePRT; |
39 class SparsePRT; |
40 |
40 |
|
41 // Essentially a wrapper around SparsePRTCleanupTask. See |
|
42 // sparsePRT.hpp for more details. |
|
43 class HRRSCleanupTask : public SparsePRTCleanupTask { |
|
44 }; |
41 |
45 |
42 // The "_coarse_map" is a bitmap with one bit for each region, where set |
46 // The "_coarse_map" is a bitmap with one bit for each region, where set |
43 // bits indicate that the corresponding region may contain some pointer |
47 // bits indicate that the corresponding region may contain some pointer |
44 // into the owning region. |
48 // into the owning region. |
45 |
49 |
154 void clear_fcc(); |
158 void clear_fcc(); |
155 |
159 |
156 // "from_hr" is being cleared; remove any entries from it. |
160 // "from_hr" is being cleared; remove any entries from it. |
157 void clear_incoming_entry(HeapRegion* from_hr); |
161 void clear_incoming_entry(HeapRegion* from_hr); |
158 |
162 |
|
163 void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task); |
|
164 |
159 // Declare the heap size (in # of regions) to the OtherRegionsTable. |
165 // Declare the heap size (in # of regions) to the OtherRegionsTable. |
160 // (Uses it to initialize from_card_cache). |
166 // (Uses it to initialize from_card_cache). |
161 static void init_from_card_cache(size_t max_regions); |
167 static void init_from_card_cache(size_t max_regions); |
162 |
168 |
163 // Declares that only regions i s.t. 0 <= i < new_n_regs are in use. |
169 // Declares that only regions i s.t. 0 <= i < new_n_regs are in use. |
164 // Make sure any entries for higher regions are invalid. |
170 // Make sure any entries for higher regions are invalid. |
165 static void shrink_from_card_cache(size_t new_n_regs); |
171 static void shrink_from_card_cache(size_t new_n_regs); |
166 |
172 |
167 static void print_from_card_cache(); |
173 static void print_from_card_cache(); |
168 |
|
169 }; |
174 }; |
170 |
|
171 |
175 |
172 class HeapRegionRemSet : public CHeapObj { |
176 class HeapRegionRemSet : public CHeapObj { |
173 friend class VMStructs; |
177 friend class VMStructs; |
174 friend class HeapRegionRemSetIterator; |
178 friend class HeapRegionRemSetIterator; |
175 |
179 |
340 |
344 |
341 static void record(HeapRegion* hr, OopOrNarrowOopStar f); |
345 static void record(HeapRegion* hr, OopOrNarrowOopStar f); |
342 static void print_recorded(); |
346 static void print_recorded(); |
343 static void record_event(Event evnt); |
347 static void record_event(Event evnt); |
344 |
348 |
|
349 // These are wrappers for the similarly-named methods on |
|
350 // SparsePRT. Look at sparsePRT.hpp for more details. |
|
351 static void reset_for_cleanup_tasks(); |
|
352 void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task); |
|
353 static void finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task); |
|
354 |
345 // Run unit tests. |
355 // Run unit tests. |
346 #ifndef PRODUCT |
356 #ifndef PRODUCT |
347 static void test(); |
357 static void test(); |
348 #endif |
358 #endif |
349 |
|
350 }; |
359 }; |
351 |
360 |
352 class HeapRegionRemSetIterator : public CHeapObj { |
361 class HeapRegionRemSetIterator : public CHeapObj { |
353 |
362 |
354 // The region over which we're iterating. |
363 // The region over which we're iterating. |