annotate src/share/vm/memory/filemap.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 6e0cb14ce59b
children 8cb56c8cb30d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
12056
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #ifndef SHARE_VM_MEMORY_FILEMAP_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #define SHARE_VM_MEMORY_FILEMAP_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
28 #include "memory/metaspaceShared.hpp"
12838
85c1ca43713f 8024547: MaxMetaspaceSize should limit the committed memory used by the metaspaces
stefank
parents: 12056
diff changeset
29 #include "memory/metaspace.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30
0
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // Layout of the file:
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // header: dump of archive instance plus versioning info, datestamp, etc.
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // [magic # = 0xF00BABA2]
a61af66fc99e Initial load
duke
parents:
diff changeset
34 // ... padding to align on page-boundary
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // read-write space from CompactingPermGenGen
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // read-only space from CompactingPermGenGen
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // misc data (block offset table, string table, symbols, dictionary, etc.)
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // tag(666)
a61af66fc99e Initial load
duke
parents:
diff changeset
39
a61af66fc99e Initial load
duke
parents:
diff changeset
40 static const int JVM_IDENT_MAX = 256;
a61af66fc99e Initial load
duke
parents:
diff changeset
41
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
42 class Metaspace;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
43
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
44 class SharedClassPathEntry VALUE_OBJ_CLASS_SPEC {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
45 public:
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
46 const char *_name;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
47 time_t _timestamp; // jar timestamp, 0 if is directory
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
48 long _filesize; // jar file size, -1 if is directory
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
49 bool is_dir() {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
50 return _filesize == -1;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
51 }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
52 };
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
53
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 1972
diff changeset
54 class FileMapInfo : public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
55 private:
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
56 friend class ManifestStream;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
57 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
58 _invalid_version = -1,
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
59 _current_version = 2
0
a61af66fc99e Initial load
duke
parents:
diff changeset
60 };
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 bool _file_open;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 int _fd;
a61af66fc99e Initial load
duke
parents:
diff changeset
64 long _file_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
65
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
66 private:
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
67 static SharedClassPathEntry* _classpath_entry_table;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
68 static int _classpath_entry_table_size;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
69 static size_t _classpath_entry_size;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
70 static bool _validating_classpath_entry_table;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
71
0
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // FileMapHeader describes the shared space data in the file to be
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // mapped. This structure gets written to a file. It is not a class, so
a61af66fc99e Initial load
duke
parents:
diff changeset
74 // that the compilers don't add any compiler-private data to it.
a61af66fc99e Initial load
duke
parents:
diff changeset
75
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
76 public:
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
77 struct FileMapHeaderBase : public CHeapObj<mtClass> {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
78 virtual bool validate() = 0;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
79 virtual void populate(FileMapInfo* info, size_t alignment) = 0;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
80 };
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
81 struct FileMapHeader : FileMapHeaderBase {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
82 // Use data() and data_size() to memcopy to/from the FileMapHeader. We need to
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
83 // avoid read/writing the C++ vtable pointer.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
84 static size_t data_size();
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
85 char* data() {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
86 return ((char*)this) + sizeof(FileMapHeaderBase);
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
87 }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
88
0
a61af66fc99e Initial load
duke
parents:
diff changeset
89 int _magic; // identify file type.
a61af66fc99e Initial load
duke
parents:
diff changeset
90 int _version; // (from enum, above.)
a61af66fc99e Initial load
duke
parents:
diff changeset
91 size_t _alignment; // how shared archive should be aligned
7461
561148896559 8005076: Creating a CDS archive with one alignment and running another causes a crash.
hseigel
parents: 6882
diff changeset
92 int _obj_alignment; // value of ObjectAlignmentInBytes
0
a61af66fc99e Initial load
duke
parents:
diff changeset
93
a61af66fc99e Initial load
duke
parents:
diff changeset
94 struct space_info {
a61af66fc99e Initial load
duke
parents:
diff changeset
95 int _file_offset; // sizeof(this) rounded to vm page size
a61af66fc99e Initial load
duke
parents:
diff changeset
96 char* _base; // copy-on-write base address
a61af66fc99e Initial load
duke
parents:
diff changeset
97 size_t _capacity; // for validity checking
a61af66fc99e Initial load
duke
parents:
diff changeset
98 size_t _used; // for setting space top on read
a61af66fc99e Initial load
duke
parents:
diff changeset
99 bool _read_only; // read only space?
a61af66fc99e Initial load
duke
parents:
diff changeset
100 bool _allow_exec; // executable code in space?
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
101 } _space[MetaspaceShared::n_regions];
0
a61af66fc99e Initial load
duke
parents:
diff changeset
102
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // The following fields are all sanity checks for whether this archive
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // will function correctly with this JVM and the bootclasspath it's
a61af66fc99e Initial load
duke
parents:
diff changeset
105 // invoked with.
a61af66fc99e Initial load
duke
parents:
diff changeset
106 char _jvm_ident[JVM_IDENT_MAX]; // identifier for jvm
a61af66fc99e Initial load
duke
parents:
diff changeset
107
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
108 // The _paths_misc_info is a variable-size structure that records "miscellaneous"
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
109 // information during dumping. It is generated and validated by the
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
110 // SharedPathsMiscInfo class. See SharedPathsMiscInfo.hpp and sharedClassUtil.hpp for
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
111 // detailed description.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
112 //
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
113 // The _paths_misc_info data is stored as a byte array in the archive file header,
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
114 // immediately after the _header field. This information is used only when
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
115 // checking the validity of the archive and is deallocated after the archive is loaded.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
116 //
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
117 // Note that the _paths_misc_info does NOT include information for JAR files
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
118 // that existed during dump time. Their information is stored in _classpath_entry_table.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
119 int _paths_misc_info_size;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
120
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
121 // The following is a table of all the class path entries that were used
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
122 // during dumping. At run time, we require these files to exist and have the same
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
123 // size/modification time, or else the archive will refuse to load.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
124 //
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
125 // All of these entries must be JAR files. The dumping process would fail if a non-empty
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
126 // directory was specified in the classpaths. If an empty directory was specified
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
127 // it is checked by the _paths_misc_info as described above.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
128 //
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
129 // FIXME -- if JAR files in the tail of the list were specified but not used during dumping,
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
130 // they should be removed from this table, to save space and to avoid spurious
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
131 // loading failures during runtime.
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
132 int _classpath_entry_table_size;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
133 size_t _classpath_entry_size;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
134 SharedClassPathEntry* _classpath_entry_table;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
135
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
136 virtual bool validate();
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
137 virtual void populate(FileMapInfo* info, size_t alignment);
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
138 };
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
139
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
140 FileMapHeader * _header;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
141
0
a61af66fc99e Initial load
duke
parents:
diff changeset
142 const char* _full_path;
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
143 char* _paths_misc_info;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
144
a61af66fc99e Initial load
duke
parents:
diff changeset
145 static FileMapInfo* _current_info;
a61af66fc99e Initial load
duke
parents:
diff changeset
146
a61af66fc99e Initial load
duke
parents:
diff changeset
147 bool init_from_file(int fd);
a61af66fc99e Initial load
duke
parents:
diff changeset
148 void align_file_position();
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
149 bool validate_header_impl();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
150
a61af66fc99e Initial load
duke
parents:
diff changeset
151 public:
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
152 FileMapInfo();
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
153 ~FileMapInfo();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
154
a61af66fc99e Initial load
duke
parents:
diff changeset
155 static int current_version() { return _current_version; }
a61af66fc99e Initial load
duke
parents:
diff changeset
156 void populate_header(size_t alignment);
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
157 bool validate_header();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158 void invalidate();
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
159 int version() { return _header->_version; }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
160 size_t alignment() { return _header->_alignment; }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
161 size_t space_capacity(int i) { return _header->_space[i]._capacity; }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
162 char* region_base(int i) { return _header->_space[i]._base; }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
163 struct FileMapHeader* header() { return _header; }
8720
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
164
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
165 static FileMapInfo* current_info() {
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
166 CDS_ONLY(return _current_info;)
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
167 NOT_CDS(return NULL;)
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
168 }
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
169
0
a61af66fc99e Initial load
duke
parents:
diff changeset
170 static void assert_mark(bool check);
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // File manipulation.
8720
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
173 bool initialize() NOT_CDS_RETURN_(false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
174 bool open_for_read();
a61af66fc99e Initial load
duke
parents:
diff changeset
175 void open_for_write();
a61af66fc99e Initial load
duke
parents:
diff changeset
176 void write_header();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
177 void write_space(int i, Metaspace* space, bool read_only);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
178 void write_region(int region, char* base, size_t size,
a61af66fc99e Initial load
duke
parents:
diff changeset
179 size_t capacity, bool read_only, bool allow_exec);
a61af66fc99e Initial load
duke
parents:
diff changeset
180 void write_bytes(const void* buffer, int count);
a61af66fc99e Initial load
duke
parents:
diff changeset
181 void write_bytes_aligned(const void* buffer, int count);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
182 char* map_region(int i);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
183 void unmap_region(int i);
a61af66fc99e Initial load
duke
parents:
diff changeset
184 void close();
a61af66fc99e Initial load
duke
parents:
diff changeset
185 bool is_open() { return _file_open; }
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
186 ReservedSpace reserve_shared_memory();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
187
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // JVM/TI RedefineClasses() support:
a61af66fc99e Initial load
duke
parents:
diff changeset
189 // Remap the shared readonly space to shared readwrite, private.
a61af66fc99e Initial load
duke
parents:
diff changeset
190 bool remap_shared_readonly_as_readwrite();
a61af66fc99e Initial load
duke
parents:
diff changeset
191
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // Errors.
a61af66fc99e Initial load
duke
parents:
diff changeset
193 static void fail_stop(const char *msg, ...);
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
194 static void fail_continue(const char *msg, ...);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 // Return true if given address is in the mapped shared space.
8720
fad90b102190 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 7461
diff changeset
197 bool is_in_shared_space(const void* p) NOT_CDS_RETURN_(false);
11056
221df7e37535 8016075: Win32 crash with CDS enabled and small heap size
iklam
parents: 8720
diff changeset
198 void print_shared_spaces() NOT_CDS_RETURN;
12056
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
199
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
200 static size_t shared_spaces_size() {
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
201 return align_size_up(SharedReadOnlySize + SharedReadWriteSize +
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
202 SharedMiscDataSize + SharedMiscCodeSize,
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
203 os::vm_allocation_granularity());
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
204 }
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
205
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
206 // Stop CDS sharing and unmap CDS regions.
740e263c80c6 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 11056
diff changeset
207 static void stop_sharing_and_unmap(const char* msg);
20375
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
208
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
209 static void allocate_classpath_entry_table();
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
210 bool validate_classpath_entry_table();
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
211
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
212 static SharedClassPathEntry* shared_classpath(int index) {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
213 char* p = (char*)_classpath_entry_table;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
214 p += _classpath_entry_size * index;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
215 return (SharedClassPathEntry*)p;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
216 }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
217 static const char* shared_classpath_name(int index) {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
218 return shared_classpath(index)->_name;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
219 }
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
220
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
221 static int get_number_of_share_classpaths() {
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
222 return _classpath_entry_table_size;
6e0cb14ce59b 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 12838
diff changeset
223 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
224 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
225
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
226 #endif // SHARE_VM_MEMORY_FILEMAP_HPP