263 static bool is_class_space_allocation(MetadataType mdType) {
264 return mdType == ClassType && using_class_space();
265 }
266
267 };
268
269 class MetaspaceAux : AllStatic {
270 static size_t free_chunks_total_words(Metaspace::MetadataType mdtype);
271
272 // These methods iterate over the classloader data graph
273 // for the given Metaspace type. These are slow.
274 static size_t used_bytes_slow(Metaspace::MetadataType mdtype);
275 static size_t free_bytes_slow(Metaspace::MetadataType mdtype);
276 static size_t capacity_bytes_slow(Metaspace::MetadataType mdtype);
277 static size_t capacity_bytes_slow();
278
279 // Running sum of space in all Metachunks that has been
280 // allocated to a Metaspace. This is used instead of
281 // iterating over all the classloaders. One for each
282 // type of Metadata
283 static size_t _allocated_capacity_words[Metaspace:: MetadataTypeCount];
284 // Running sum of space in all Metachunks that have
285 // are being used for metadata. One for each
286 // type of Metadata.
287 static size_t _allocated_used_words[Metaspace:: MetadataTypeCount];
288
289 public:
290 // Decrement and increment _allocated_capacity_words
291 static void dec_capacity(Metaspace::MetadataType type, size_t words);
292 static void inc_capacity(Metaspace::MetadataType type, size_t words);
293
294 // Decrement and increment _allocated_used_words
295 static void dec_used(Metaspace::MetadataType type, size_t words);
296 static void inc_used(Metaspace::MetadataType type, size_t words);
297
298 // Total of space allocated to metadata in all Metaspaces.
299 // This sums the space used in each Metachunk by
300 // iterating over the classloader data graph
301 static size_t used_bytes_slow() {
302 return used_bytes_slow(Metaspace::ClassType) +
303 used_bytes_slow(Metaspace::NonClassType);
304 }
305
306 // Used by MetaspaceCounters
307 static size_t free_chunks_total_words();
308 static size_t free_chunks_total_bytes();
309 static size_t free_chunks_total_bytes(Metaspace::MetadataType mdtype);
310
311 static size_t allocated_capacity_words(Metaspace::MetadataType mdtype) {
312 return _allocated_capacity_words[mdtype];
313 }
314 static size_t allocated_capacity_words() {
315 return allocated_capacity_words(Metaspace::NonClassType) +
316 allocated_capacity_words(Metaspace::ClassType);
317 }
318 static size_t allocated_capacity_bytes(Metaspace::MetadataType mdtype) {
319 return allocated_capacity_words(mdtype) * BytesPerWord;
320 }
321 static size_t allocated_capacity_bytes() {
322 return allocated_capacity_words() * BytesPerWord;
323 }
324
325 static size_t allocated_used_words(Metaspace::MetadataType mdtype) {
326 return _allocated_used_words[mdtype];
327 }
328 static size_t allocated_used_words() {
329 return allocated_used_words(Metaspace::NonClassType) +
330 allocated_used_words(Metaspace::ClassType);
331 }
332 static size_t allocated_used_bytes(Metaspace::MetadataType mdtype) {
333 return allocated_used_words(mdtype) * BytesPerWord;
334 }
335 static size_t allocated_used_bytes() {
336 return allocated_used_words() * BytesPerWord;
337 }
338
339 static size_t free_bytes();
340 static size_t free_bytes(Metaspace::MetadataType mdtype);
341
342 static size_t reserved_bytes(Metaspace::MetadataType mdtype);
343 static size_t reserved_bytes() {
344 return reserved_bytes(Metaspace::ClassType) +
345 reserved_bytes(Metaspace::NonClassType);
346 }
347
348 static size_t committed_bytes(Metaspace::MetadataType mdtype);
349 static size_t committed_bytes() {
350 return committed_bytes(Metaspace::ClassType) +
351 committed_bytes(Metaspace::NonClassType);
352 }
353
354 static size_t min_chunk_size_words();
355 static size_t min_chunk_size_bytes() {
356 return min_chunk_size_words() * BytesPerWord;
|
263 static bool is_class_space_allocation(MetadataType mdType) {
264 return mdType == ClassType && using_class_space();
265 }
266
267 };
268
269 class MetaspaceAux : AllStatic {
270 static size_t free_chunks_total_words(Metaspace::MetadataType mdtype);
271
272 // These methods iterate over the classloader data graph
273 // for the given Metaspace type. These are slow.
274 static size_t used_bytes_slow(Metaspace::MetadataType mdtype);
275 static size_t free_bytes_slow(Metaspace::MetadataType mdtype);
276 static size_t capacity_bytes_slow(Metaspace::MetadataType mdtype);
277 static size_t capacity_bytes_slow();
278
279 // Running sum of space in all Metachunks that has been
280 // allocated to a Metaspace. This is used instead of
281 // iterating over all the classloaders. One for each
282 // type of Metadata
283 static size_t _capacity_words[Metaspace:: MetadataTypeCount];
284 // Running sum of space in all Metachunks that
285 // are being used for metadata. One for each
286 // type of Metadata.
287 static size_t _used_words[Metaspace:: MetadataTypeCount];
288
289 public:
290 // Decrement and increment _allocated_capacity_words
291 static void dec_capacity(Metaspace::MetadataType type, size_t words);
292 static void inc_capacity(Metaspace::MetadataType type, size_t words);
293
294 // Decrement and increment _allocated_used_words
295 static void dec_used(Metaspace::MetadataType type, size_t words);
296 static void inc_used(Metaspace::MetadataType type, size_t words);
297
298 // Total of space allocated to metadata in all Metaspaces.
299 // This sums the space used in each Metachunk by
300 // iterating over the classloader data graph
301 static size_t used_bytes_slow() {
302 return used_bytes_slow(Metaspace::ClassType) +
303 used_bytes_slow(Metaspace::NonClassType);
304 }
305
306 // Used by MetaspaceCounters
307 static size_t free_chunks_total_words();
308 static size_t free_chunks_total_bytes();
309 static size_t free_chunks_total_bytes(Metaspace::MetadataType mdtype);
310
311 static size_t capacity_words(Metaspace::MetadataType mdtype) {
312 return _capacity_words[mdtype];
313 }
314 static size_t capacity_words() {
315 return capacity_words(Metaspace::NonClassType) +
316 capacity_words(Metaspace::ClassType);
317 }
318 static size_t capacity_bytes(Metaspace::MetadataType mdtype) {
319 return capacity_words(mdtype) * BytesPerWord;
320 }
321 static size_t capacity_bytes() {
322 return capacity_words() * BytesPerWord;
323 }
324
325 static size_t used_words(Metaspace::MetadataType mdtype) {
326 return _used_words[mdtype];
327 }
328 static size_t used_words() {
329 return used_words(Metaspace::NonClassType) +
330 used_words(Metaspace::ClassType);
331 }
332 static size_t used_bytes(Metaspace::MetadataType mdtype) {
333 return used_words(mdtype) * BytesPerWord;
334 }
335 static size_t used_bytes() {
336 return used_words() * BytesPerWord;
337 }
338
339 static size_t free_bytes();
340 static size_t free_bytes(Metaspace::MetadataType mdtype);
341
342 static size_t reserved_bytes(Metaspace::MetadataType mdtype);
343 static size_t reserved_bytes() {
344 return reserved_bytes(Metaspace::ClassType) +
345 reserved_bytes(Metaspace::NonClassType);
346 }
347
348 static size_t committed_bytes(Metaspace::MetadataType mdtype);
349 static size_t committed_bytes() {
350 return committed_bytes(Metaspace::ClassType) +
351 committed_bytes(Metaspace::NonClassType);
352 }
353
354 static size_t min_chunk_size_words();
355 static size_t min_chunk_size_bytes() {
356 return min_chunk_size_words() * BytesPerWord;
|