comparison src/share/vm/gc_implementation/shared/vmGCOperations.hpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents c798c277ddd1
children 685df3c6f84b
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
1 /* 1 /*
2 * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
40 // VM_GC_HeapInspection 40 // VM_GC_HeapInspection
41 // VM_GenCollectForAllocation 41 // VM_GenCollectForAllocation
42 // VM_GenCollectFull 42 // VM_GenCollectFull
43 // VM_GenCollectFullConcurrent 43 // VM_GenCollectFullConcurrent
44 // VM_ParallelGCFailedAllocation 44 // VM_ParallelGCFailedAllocation
45 // VM_ParallelGCFailedPermanentAllocation
46 // VM_ParallelGCSystemGC 45 // VM_ParallelGCSystemGC
47 // VM_GC_Operation 46 // VM_GC_Operation
48 // - implements methods common to all classes in the hierarchy: 47 // - implements methods common to all classes in the hierarchy:
49 // prevents multiple gc requests and manages lock on heap; 48 // prevents multiple gc requests and manages lock on heap;
50 // 49 //
51 // VM_GC_HeapInspection 50 // VM_GC_HeapInspection
52 // - prints class histogram on SIGBREAK if PrintClassHistogram 51 // - prints class histogram on SIGBREAK if PrintClassHistogram
53 // is specified; and also the attach "inspectheap" operation 52 // is specified; and also the attach "inspectheap" operation
54 // 53 //
55 // VM_GenCollectForAllocation 54 // VM_GenCollectForAllocation
56 // VM_GenCollectForPermanentAllocation
57 // VM_ParallelGCFailedAllocation 55 // VM_ParallelGCFailedAllocation
58 // VM_ParallelGCFailedPermanentAllocation
59 // - this operation is invoked when allocation is failed; 56 // - this operation is invoked when allocation is failed;
60 // operation performs garbage collection and tries to 57 // operation performs garbage collection and tries to
61 // allocate afterwards; 58 // allocate afterwards;
62 // 59 //
63 // VM_GenCollectFull 60 // VM_GenCollectFull
189 ~VM_GenCollectFull() {} 186 ~VM_GenCollectFull() {}
190 virtual VMOp_Type type() const { return VMOp_GenCollectFull; } 187 virtual VMOp_Type type() const { return VMOp_GenCollectFull; }
191 virtual void doit(); 188 virtual void doit();
192 }; 189 };
193 190
194 class VM_GenCollectForPermanentAllocation: public VM_GC_Operation { 191 class VM_CollectForMetadataAllocation: public VM_GC_Operation {
195 private: 192 private:
196 HeapWord* _res; 193 MetaWord* _result;
197 size_t _size; // size of object to be allocated 194 size_t _size; // size of object to be allocated
198 public: 195 Metaspace::MetadataType _mdtype;
199 VM_GenCollectForPermanentAllocation(size_t size, 196 ClassLoaderData* _loader_data;
197 public:
198 VM_CollectForMetadataAllocation(ClassLoaderData* loader_data,
199 size_t size, Metaspace::MetadataType mdtype,
200 unsigned int gc_count_before, 200 unsigned int gc_count_before,
201 unsigned int full_gc_count_before, 201 unsigned int full_gc_count_before,
202 GCCause::Cause gc_cause) 202 GCCause::Cause gc_cause)
203 : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true), 203 : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true),
204 _size(size) { 204 _loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) {
205 _res = NULL; 205 }
206 _gc_cause = gc_cause; 206 ~VM_CollectForMetadataAllocation() {
207 } 207 MetaspaceGC::set_expand_after_GC(false);
208 ~VM_GenCollectForPermanentAllocation() {} 208 }
209 virtual VMOp_Type type() const { return VMOp_GenCollectForPermanentAllocation; } 209 virtual VMOp_Type type() const { return VMOp_CollectForMetadataAllocation; }
210 virtual void doit(); 210 virtual void doit();
211 HeapWord* result() const { return _res; } 211 MetaWord* result() const { return _result; }
212 }; 212 };
213 213
214 class SvcGCMarker : public StackObj { 214 class SvcGCMarker : public StackObj {
215 private: 215 private:
216 JvmtiGCMarker _jgcm; 216 JvmtiGCMarker _jgcm;