annotate src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 7b2fc3129653
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
1 /*
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
4 *
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
7 * published by the Free Software Foundation.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
8 *
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
13 * accompanied this code).
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
14 *
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
18 *
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
21 * questions.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
22 *
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
23 */
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
24
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
27
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
28 #include "gc_implementation/g1/g1PageBasedVirtualSpace.hpp"
20339
7b2fc3129653 8055635: Missing include in g1RegionToSpaceMapper.hpp results in unresolved symbol of fastdebug build without precompiled headers
tschatzl
parents: 20337
diff changeset
29 #include "memory/allocation.hpp"
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
30 #include "utilities/debug.hpp"
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
31
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
32 class G1MappingChangedListener VALUE_OBJ_CLASS_SPEC {
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
33 public:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
34 // Fired after commit of the memory, i.e. the memory this listener is registered
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
35 // for can be accessed.
20543
e7d0505c8a30 8059758: Footprint regressions with JDK-8038423
tschatzl
parents: 20339
diff changeset
36 // Zero_filled indicates that the memory can be considered as filled with zero bytes
e7d0505c8a30 8059758: Footprint regressions with JDK-8038423
tschatzl
parents: 20339
diff changeset
37 // when called.
e7d0505c8a30 8059758: Footprint regressions with JDK-8038423
tschatzl
parents: 20339
diff changeset
38 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled) = 0;
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
39 };
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
40
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
41 // Maps region based commit/uncommit requests to the underlying page sized virtual
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
42 // space.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
43 class G1RegionToSpaceMapper : public CHeapObj<mtGC> {
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
44 private:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
45 G1MappingChangedListener* _listener;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
46 protected:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
47 // Backing storage.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
48 G1PageBasedVirtualSpace _storage;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
49 size_t _commit_granularity;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
50 size_t _region_granularity;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
51 // Mapping management
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
52 BitMap _commit_map;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
53
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
54 G1RegionToSpaceMapper(ReservedSpace rs, size_t commit_granularity, size_t region_granularity, MemoryType type);
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
55
20543
e7d0505c8a30 8059758: Footprint regressions with JDK-8038423
tschatzl
parents: 20339
diff changeset
56 void fire_on_commit(uint start_idx, size_t num_regions, bool zero_filled);
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
57 public:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
58 MemRegion reserved() { return _storage.reserved(); }
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
59
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
60 void set_mapping_changed_listener(G1MappingChangedListener* listener) { _listener = listener; }
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
61
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
62 virtual ~G1RegionToSpaceMapper() {
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
63 _commit_map.resize(0, /* in_resource_area */ false);
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
64 }
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
65
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
66 bool is_committed(uintptr_t idx) const {
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
67 return _commit_map.at(idx);
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
68 }
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
69
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
70 virtual void commit_regions(uintptr_t start_idx, size_t num_regions = 1) = 0;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
71 virtual void uncommit_regions(uintptr_t start_idx, size_t num_regions = 1) = 0;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
72
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
73 // Creates an appropriate G1RegionToSpaceMapper for the given parameters.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
74 // The byte_translation_factor defines how many bytes in a region correspond to
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
75 // a single byte in the data structure this mapper is for.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
76 // Eg. in the card table, this value corresponds to the size a single card
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
77 // table entry corresponds to.
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
78 static G1RegionToSpaceMapper* create_mapper(ReservedSpace rs,
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
79 size_t os_commit_granularity,
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
80 size_t region_granularity,
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
81 size_t byte_translation_factor,
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
82 MemoryType type);
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
83 };
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
84
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents:
diff changeset
85 #endif /* SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP */