< prev index next >

src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 58,72 **** --- 58,94 ---- const size_t _max_gen_size; // Used when initializing the _name field. static inline const char* select_name(); + #ifdef ASSERT + #define assert_block_in_covered_region(_block_start_, _word_size_) \ + do { \ + MemRegion __covered_region__ = this->start_array()->covered_region(); \ + MemRegion __new_memregion__(_block_start_, _word_size_); \ + MemRegion __used__ = this->object_space()->used_region(); \ + assert(__covered_region__.contains(__new_memregion__), \ + err_msg("new region is not in covered_region [ "PTR_FORMAT", "PTR_FORMAT" ], " \ + "new region [ "PTR_FORMAT", "PTR_FORMAT" ], " \ + "object space [ "PTR_FORMAT", "PTR_FORMAT" ]", \ + p2i(__covered_region__.start()), \ + p2i(__covered_region__.end()), \ + p2i(__new_memregion__.start()), \ + p2i(__new_memregion__.end()), \ + p2i(__used__.start()), \ + p2i(__used__.end()))); \ + } while (0) + #else + #define assert_block_in_covered_region(_block_start_, _word_size_) + #endif + HeapWord* allocate_noexpand(size_t word_size) { // We assume the heap lock is held here. assert_locked_or_safepoint(Heap_lock); HeapWord* res = object_space()->allocate(word_size); if (res != NULL) { + assert_block_in_covered_region(res, word_size); _start_array.allocate_block(res); } return res; }
*** 75,84 **** --- 97,107 ---- // safe for use at the same time as allocate_noexpand()! HeapWord* cas_allocate_noexpand(size_t word_size) { assert(SafepointSynchronize::is_at_safepoint(), "Must only be called at safepoint"); HeapWord* res = object_space()->cas_allocate(word_size); if (res != NULL) { + assert_block_in_covered_region(res, word_size); _start_array.allocate_block(res); } return res; }
< prev index next >