1 /*
2 * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 //
26 // This class can be used to locate the beginning of an object in the
27 // covered region.
28 //
29
30 class ObjectStartArray : public CHeapObj {
31 friend class VerifyObjectStartArrayClosure;
32
33 private:
34 PSVirtualSpace _virtual_space;
35 MemRegion _reserved_region;
36 MemRegion _covered_region;
37 MemRegion _blocks_region;
38 jbyte* _raw_base;
39 jbyte* _offset_base;
40
41 public:
42
43 enum BlockValueConstants {
44 clean_block = -1
143 }
144 assert(scroll_forward <= addr, "wrong order for current and arg");
145 assert(addr <= next, "wrong order for arg and next");
146 return scroll_forward;
147 }
148
149 bool is_block_allocated(HeapWord* addr) {
150 assert(_covered_region.contains(addr), "Must be in covered region");
151 jbyte* block = block_for_addr(addr);
152 if (*block == clean_block)
153 return false;
154
155 return true;
156 }
157
158 // Return true if an object starts in the range of heap addresses.
159 // If an object starts at an address corresponding to
160 // "start", the method will return true.
161 bool object_starts_in_range(HeapWord* start_addr, HeapWord* end_addr) const;
162 };
|
1 /*
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP
26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP
27
28 #include "gc_implementation/parallelScavenge/psVirtualspace.hpp"
29 #include "memory/allocation.hpp"
30 #include "memory/memRegion.hpp"
31 #include "oops/oop.hpp"
32
33 //
34 // This class can be used to locate the beginning of an object in the
35 // covered region.
36 //
37
38 class ObjectStartArray : public CHeapObj {
39 friend class VerifyObjectStartArrayClosure;
40
41 private:
42 PSVirtualSpace _virtual_space;
43 MemRegion _reserved_region;
44 MemRegion _covered_region;
45 MemRegion _blocks_region;
46 jbyte* _raw_base;
47 jbyte* _offset_base;
48
49 public:
50
51 enum BlockValueConstants {
52 clean_block = -1
151 }
152 assert(scroll_forward <= addr, "wrong order for current and arg");
153 assert(addr <= next, "wrong order for arg and next");
154 return scroll_forward;
155 }
156
157 bool is_block_allocated(HeapWord* addr) {
158 assert(_covered_region.contains(addr), "Must be in covered region");
159 jbyte* block = block_for_addr(addr);
160 if (*block == clean_block)
161 return false;
162
163 return true;
164 }
165
166 // Return true if an object starts in the range of heap addresses.
167 // If an object starts at an address corresponding to
168 // "start", the method will return true.
169 bool object_starts_in_range(HeapWord* start_addr, HeapWord* end_addr) const;
170 };
171
172 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP
|