< prev index next >

src/hotspot/share/gc/shared/barrierSet.inline.hpp

RFE_8195103_reduce_initial_card_marks

0 /*                                                                                                                         
1  * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.                                            
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.                                                           
3  *                                                                                                                         
4  * This code is free software; you can redistribute it and/or modify it                                                    
5  * under the terms of the GNU General Public License version 2 only, as                                                    
6  * published by the Free Software Foundation.                                                                              
7  *                                                                                                                         
8  * This code is distributed in the hope that it will be useful, but WITHOUT                                                
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or                                                   
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License                                                   
11  * version 2 for more details (a copy is included in the LICENSE file that                                                 
12  * accompanied this code).                                                                                                 
13  *                                                                                                                         
14  * You should have received a copy of the GNU General Public License version                                               
15  * 2 along with this work; if not, write to the Free Software Foundation,                                                  
16  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.                                                           
17  *                                                                                                                         
18  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA                                                 
19  * or visit www.oracle.com if you need additional information or have any                                                  
20  * questions.                                                                                                              

0 /*
1  * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3  *
4  * This code is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 only, as
6  * published by the Free Software Foundation.
7  *
8  * This code is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
11  * version 2 for more details (a copy is included in the LICENSE file that
12  * accompanied this code).
13  *
14  * You should have received a copy of the GNU General Public License version
15  * 2 along with this work; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17  *
18  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19  * or visit www.oracle.com if you need additional information or have any
20  * questions.

32 void BarrierSet::write_ref_array(HeapWord* start, size_t count) {                                                          
33   assert(count <= (size_t)max_intx, "count too large");                                                                    
34   HeapWord* end = (HeapWord*)((char*)start + (count*heapOopSize));                                                         
35   // In the case of compressed oops, start and end may potentially be misaligned;                                          
36   // so we need to conservatively align the first downward (this is not                                                    
37   // strictly necessary for current uses, but a case of good hygiene and,                                                  
38   // if you will, aesthetics) and the second upward (this is essential for                                                 
39   // current uses) to a HeapWord boundary, so we mark all cards overlapping                                                
40   // this write. If this evolves in the future to calling a                                                                
41   // logging barrier of narrow oop granularity, like the pre-barrier for G1                                                
42   // (mentioned here merely by way of example), we will need to change this                                                
43   // interface, so it is "exactly precise" (if i may be allowed the adverbial                                              
44   // redundancy for emphasis) and does not include narrow oop slots not                                                    
45   // included in the original write interval.                                                                              
46   HeapWord* aligned_start = align_down(start, HeapWordSize);                                                               
47   HeapWord* aligned_end   = align_up  (end,   HeapWordSize);                                                               
48   // If compressed oops were not being used, these should already be aligned                                               
49   assert(UseCompressedOops || (aligned_start == start && aligned_end == end),                                              
50          "Expected heap word alignment of start and end");                                                                 
51   write_ref_array_work(MemRegion(aligned_start, aligned_end));                                                             
52 }                                                                                                                          
53                                                                                                                            
54 inline void BarrierSet::write_region(MemRegion mr) {                                                                       
55   write_region_work(mr);                                                                                                   
56 }                                                                                                                          
57 
58 #endif // SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP                                                                         

32 void BarrierSet::write_ref_array(HeapWord* start, size_t count) {
33   assert(count <= (size_t)max_intx, "count too large");
34   HeapWord* end = (HeapWord*)((char*)start + (count*heapOopSize));
35   // In the case of compressed oops, start and end may potentially be misaligned;
36   // so we need to conservatively align the first downward (this is not
37   // strictly necessary for current uses, but a case of good hygiene and,
38   // if you will, aesthetics) and the second upward (this is essential for
39   // current uses) to a HeapWord boundary, so we mark all cards overlapping
40   // this write. If this evolves in the future to calling a
41   // logging barrier of narrow oop granularity, like the pre-barrier for G1
42   // (mentioned here merely by way of example), we will need to change this
43   // interface, so it is "exactly precise" (if i may be allowed the adverbial
44   // redundancy for emphasis) and does not include narrow oop slots not
45   // included in the original write interval.
46   HeapWord* aligned_start = align_down(start, HeapWordSize);
47   HeapWord* aligned_end   = align_up  (end,   HeapWordSize);
48   // If compressed oops were not being used, these should already be aligned
49   assert(UseCompressedOops || (aligned_start == start && aligned_end == end),
50          "Expected heap word alignment of start and end");
51   write_ref_array_work(MemRegion(aligned_start, aligned_end));




52 }
53 
54 #endif // SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP
< prev index next >