Mercurial > hg > truffle
annotate src/share/vm/memory/metaspaceShared.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 | b23a19cd0536 |
children | 03e6d34be1f5 |
rev | line source |
---|---|
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
1 /* |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
4 * |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
8 * |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
13 * accompanied this code). |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
14 * |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
18 * |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
21 * questions. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
22 * |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
23 */ |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
24 #ifndef SHARE_VM_MEMORY_METASPACE_SHARED_HPP |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
25 #define SHARE_VM_MEMORY_METASPACE_SHARED_HPP |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
26 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
27 #include "memory/allocation.hpp" |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
28 #include "memory/memRegion.hpp" |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
29 #include "runtime/virtualspace.hpp" |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
30 #include "utilities/exceptions.hpp" |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
31 #include "utilities/macros.hpp" |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
32 |
20389
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
33 #define LargeSharedArchiveSize (300*M) |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
34 #define HugeSharedArchiveSize (800*M) |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
35 #define ReadOnlyRegionPercentage 0.4 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
36 #define ReadWriteRegionPercentage 0.55 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
37 #define MiscDataRegionPercentage 0.03 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
38 #define MiscCodeRegionPercentage 0.02 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
39 #define LargeThresholdClassCount 5000 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
40 #define HugeThresholdClassCount 40000 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
41 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
42 #define SET_ESTIMATED_SIZE(type, region) \ |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
43 Shared ##region## Size = FLAG_IS_DEFAULT(Shared ##region## Size) ? \ |
20390
b23a19cd0536
8056175: Change "8048150: Allow easy configurations for large CDS archives" triggers conversion warning with older GCC
ccheung
parents:
20389
diff
changeset
|
44 (uintx)(type ## SharedArchiveSize * region ## RegionPercentage) : Shared ## region ## Size |
20389
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
45 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
46 class FileMapInfo; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
47 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
48 // Class Data Sharing Support |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
49 class MetaspaceShared : AllStatic { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
50 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
51 // CDS support |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
52 static ReservedSpace* _shared_rs; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
53 static int _max_alignment; |
20375
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
54 static bool _link_classes_made_progress; |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
55 static bool _check_classes_made_progress; |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
56 static bool _has_error_classes; |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
57 static bool _archive_loading_failed; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
58 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
59 enum { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
60 vtbl_list_size = 17, // number of entries in the shared space vtable list. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
61 num_virtuals = 200 // maximum number of virtual functions |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
62 // If virtual functions are added to Metadata, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
63 // this number needs to be increased. Also, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
64 // SharedMiscCodeSize will need to be increased. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
65 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
66 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
67 enum { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
68 ro = 0, // read-only shared space in the heap |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
69 rw = 1, // read-write shared space in the heap |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
70 md = 2, // miscellaneous data for initializing tables, etc. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
71 mc = 3, // miscellaneous code - vtable replacement. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
72 n_regions = 4 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
73 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
74 |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
75 // Accessor functions to save shared space created for metadata, which has |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
76 // extra space allocated at the end for miscellaneous data and code. |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
77 static void set_max_alignment(int alignment) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
78 CDS_ONLY(_max_alignment = alignment); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
79 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
80 |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
81 static int max_alignment() { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
82 CDS_ONLY(return _max_alignment); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
83 NOT_CDS(return 0); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
84 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
85 |
20375
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
86 static void prepare_for_dumping() NOT_CDS_RETURN; |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
87 static void preload_and_dump(TRAPS) NOT_CDS_RETURN; |
20375
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
88 static int preload_and_dump(const char * class_list_path, |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
89 GrowableArray<Klass*>* class_promote_order, |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
90 TRAPS) NOT_CDS_RETURN; |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
91 |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
92 static ReservedSpace* shared_rs() { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
93 CDS_ONLY(return _shared_rs); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
94 NOT_CDS(return NULL); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
95 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
96 |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
97 static void set_shared_rs(ReservedSpace* rs) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
98 CDS_ONLY(_shared_rs = rs;) |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
99 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
100 |
20375
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
101 static void set_archive_loading_failed() { |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
102 _archive_loading_failed = true; |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
103 } |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
104 static bool map_shared_spaces(FileMapInfo* mapinfo) NOT_CDS_RETURN_(false); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
105 static void initialize_shared_spaces() NOT_CDS_RETURN; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
106 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
107 // Return true if given address is in the mapped shared space. |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
108 static bool is_in_shared_space(const void* p) NOT_CDS_RETURN_(false); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
109 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
110 static void generate_vtable_methods(void** vtbl_list, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
111 void** vtable, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
112 char** md_top, char* md_end, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
113 char** mc_top, char* mc_end); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
114 static void serialize(SerializeClosure* sc); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
115 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
116 // JVM/TI RedefineClasses() support: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
117 // Remap the shared readonly space to shared readwrite, private if |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
118 // sharing is enabled. Simply returns true if sharing is not enabled |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
119 // or if the remapping has already been done by a prior call. |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6725
diff
changeset
|
120 static bool remap_shared_readonly_as_readwrite() NOT_CDS_RETURN_(true); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
121 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
122 static void print_shared_spaces(); |
20375
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
123 |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
124 static bool try_link_class(InstanceKlass* ik, TRAPS); |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
125 static void link_one_shared_class(Klass* obj, TRAPS); |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
126 static void check_one_shared_class(Klass* obj); |
6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
iklam
parents:
6854
diff
changeset
|
127 static void link_and_cleanup_shared_classes(TRAPS); |
20389
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
128 |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
129 static int count_class(const char* classlist_file); |
622c6e0ad4d6
8048150: Allow easy configurations for large CDS archives
ccheung
parents:
20375
diff
changeset
|
130 static void estimate_regions_size() NOT_CDS_RETURN; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
131 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
diff
changeset
|
132 #endif // SHARE_VM_MEMORY_METASPACE_SHARED_HPP |