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 // The CollectedHeap type requires subtypes to implement a method 26 // "block_start". For some subtypes, notably generational 27 // systems using card-table-based write barriers, the efficiency of this 28 // operation may be important. Implementations of the "BlockOffsetArray" 29 // class may be useful in providing such efficient implementations. 30 // 31 // BlockOffsetTable (abstract) 32 // - BlockOffsetArray (abstract) 33 // - BlockOffsetArrayNonContigSpace 34 // - BlockOffsetArrayContigSpace 35 // 36 37 class ContiguousSpace; 38 class SerializeOopClosure; 39 40 ////////////////////////////////////////////////////////////////////////// 41 // The BlockOffsetTable "interface" 42 ////////////////////////////////////////////////////////////////////////// 43 class BlockOffsetTable VALUE_OBJ_CLASS_SPEC { 44 friend class VMStructs; 544 // [blk_start, blk_end) representing a block of memory in the heap. 545 // In this implementation, however, we are OK even if blk_start and/or 546 // blk_end are NULL because NULL is represented as 0, and thus 547 // never exceeds the "_next_offset_threshold". 548 void alloc_block(HeapWord* blk_start, HeapWord* blk_end) { 549 if (blk_end > _next_offset_threshold) { 550 alloc_block_work(blk_start, blk_end); 551 } 552 } 553 void alloc_block(HeapWord* blk, size_t size) { 554 alloc_block(blk, blk + size); 555 } 556 557 HeapWord* block_start_unsafe(const void* addr) const; 558 559 void serialize(SerializeOopClosure* soc); 560 561 // Debugging support 562 virtual size_t last_active_index() const; 563 }; | 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_MEMORY_BLOCKOFFSETTABLE_HPP 26 #define SHARE_VM_MEMORY_BLOCKOFFSETTABLE_HPP 27 28 #include "memory/memRegion.hpp" 29 #include "runtime/virtualspace.hpp" 30 #include "utilities/globalDefinitions.hpp" 31 32 // The CollectedHeap type requires subtypes to implement a method 33 // "block_start". For some subtypes, notably generational 34 // systems using card-table-based write barriers, the efficiency of this 35 // operation may be important. Implementations of the "BlockOffsetArray" 36 // class may be useful in providing such efficient implementations. 37 // 38 // BlockOffsetTable (abstract) 39 // - BlockOffsetArray (abstract) 40 // - BlockOffsetArrayNonContigSpace 41 // - BlockOffsetArrayContigSpace 42 // 43 44 class ContiguousSpace; 45 class SerializeOopClosure; 46 47 ////////////////////////////////////////////////////////////////////////// 48 // The BlockOffsetTable "interface" 49 ////////////////////////////////////////////////////////////////////////// 50 class BlockOffsetTable VALUE_OBJ_CLASS_SPEC { 51 friend class VMStructs; 551 // [blk_start, blk_end) representing a block of memory in the heap. 552 // In this implementation, however, we are OK even if blk_start and/or 553 // blk_end are NULL because NULL is represented as 0, and thus 554 // never exceeds the "_next_offset_threshold". 555 void alloc_block(HeapWord* blk_start, HeapWord* blk_end) { 556 if (blk_end > _next_offset_threshold) { 557 alloc_block_work(blk_start, blk_end); 558 } 559 } 560 void alloc_block(HeapWord* blk, size_t size) { 561 alloc_block(blk, blk + size); 562 } 563 564 HeapWord* block_start_unsafe(const void* addr) const; 565 566 void serialize(SerializeOopClosure* soc); 567 568 // Debugging support 569 virtual size_t last_active_index() const; 570 }; 571 572 #endif // SHARE_VM_MEMORY_BLOCKOFFSETTABLE_HPP |