1 /*
2 * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP
26 #define SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP
27
28 #include "gc/parallel/generationSizer.hpp"
29 #include "gc/parallel/objectStartArray.hpp"
30 #include "gc/parallel/psGCAdaptivePolicyCounters.hpp"
31 #include "gc/parallel/psOldGen.hpp"
32 #include "gc/parallel/psYoungGen.hpp"
33 #include "gc/shared/collectedHeap.hpp"
34 #include "gc/shared/collectorPolicy.hpp"
35 #include "gc/shared/gcPolicyCounters.hpp"
36 #include "gc/shared/gcWhen.hpp"
37 #include "gc/shared/strongRootsScope.hpp"
38 #include "memory/metaspace.hpp"
39 #include "utilities/ostream.hpp"
40
41 class AdjoiningGenerations;
42 class GCHeapSummary;
43 class GCTaskManager;
44 class PSAdaptiveSizePolicy;
45 class PSHeapSummary;
46
47 class ParallelScavengeHeap : public CollectedHeap {
48 friend class VMStructs;
49 private:
50 static PSYoungGen* _young_gen;
51 static PSOldGen* _old_gen;
52
53 // Sizing policy for entire heap
54 static PSAdaptiveSizePolicy* _size_policy;
55 static PSGCAdaptivePolicyCounters* _gc_policy_counters;
56
57 GenerationSizer* _collector_policy;
58
59 // Collection of generations that are adjacent in the
60 // space reserved for the heap.
61 AdjoiningGenerations* _gens;
62 unsigned int _death_march_count;
63
64 // The task manager
65 static GCTaskManager* _gc_task_manager;
66
67 void trace_heap(GCWhen::Type when, const GCTracer* tracer);
68
69 protected:
70 static inline size_t total_invocations();
71 HeapWord* allocate_new_tlab(size_t size);
72
73 inline bool should_alloc_in_eden(size_t size) const;
74 inline void death_march_check(HeapWord* const result, size_t size);
75 HeapWord* mem_allocate_old_gen(size_t size);
76
77 public:
78 ParallelScavengeHeap(GenerationSizer* policy) :
79 CollectedHeap(), _collector_policy(policy), _death_march_count(0) { }
80
81 // For use by VM operations
82 enum CollectionType {
83 Scavenge,
84 MarkSweep
85 };
86
87 virtual Name kind() const {
88 return CollectedHeap::ParallelScavengeHeap;
89 }
90
91 virtual const char* name() const {
92 return "Parallel";
93 }
94
95 virtual CollectorPolicy* collector_policy() const { return _collector_policy; }
96
97 static PSYoungGen* young_gen() { return _young_gen; }
98 static PSOldGen* old_gen() { return _old_gen; }
99
100 virtual PSAdaptiveSizePolicy* size_policy() { return _size_policy; }
101
102 static PSGCAdaptivePolicyCounters* gc_policy_counters() { return _gc_policy_counters; }
103
104 static ParallelScavengeHeap* heap();
105
106 static GCTaskManager* const gc_task_manager() { return _gc_task_manager; }
107
108 AdjoiningGenerations* gens() { return _gens; }
109
110 // Returns JNI_OK on success
111 virtual jint initialize();
112
113 void post_initialize();
114 void update_counters();
115
|
1 /*
2 * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP
26 #define SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP
27
28 #include "gc/parallel/generationSizer.hpp"
29 #include "gc/parallel/objectStartArray.hpp"
30 #include "gc/parallel/psGCAdaptivePolicyCounters.hpp"
31 #include "gc/parallel/psOldGen.hpp"
32 #include "gc/parallel/psYoungGen.hpp"
33 #include "gc/shared/collectedHeap.hpp"
34 #include "gc/shared/collectorPolicy.hpp"
35 #include "gc/shared/gcPolicyCounters.hpp"
36 #include "gc/shared/gcWhen.hpp"
37 #include "gc/shared/strongRootsScope.hpp"
38 #include "memory/metaspace.hpp"
39 #include "utilities/growableArray.hpp"
40 #include "utilities/ostream.hpp"
41
42 class AdjoiningGenerations;
43 class GCHeapSummary;
44 class GCMemoryManager;
45 class GCTaskManager;
46 class MemoryPool;
47 class PSAdaptiveSizePolicy;
48 class PSHeapSummary;
49
50 class ParallelScavengeHeap : public CollectedHeap {
51 friend class VMStructs;
52 private:
53 static PSYoungGen* _young_gen;
54 static PSOldGen* _old_gen;
55
56 // Sizing policy for entire heap
57 static PSAdaptiveSizePolicy* _size_policy;
58 static PSGCAdaptivePolicyCounters* _gc_policy_counters;
59
60 GenerationSizer* _collector_policy;
61
62 // Collection of generations that are adjacent in the
63 // space reserved for the heap.
64 AdjoiningGenerations* _gens;
65 unsigned int _death_march_count;
66
67 // The task manager
68 static GCTaskManager* _gc_task_manager;
69
70 GCMemoryManager* _minor_mgr;
71 GCMemoryManager* _major_mgr;
72
73 void trace_heap(GCWhen::Type when, const GCTracer* tracer);
74
75 protected:
76 static inline size_t total_invocations();
77 HeapWord* allocate_new_tlab(size_t size);
78
79 inline bool should_alloc_in_eden(size_t size) const;
80 inline void death_march_check(HeapWord* const result, size_t size);
81 HeapWord* mem_allocate_old_gen(size_t size);
82
83 public:
84 ParallelScavengeHeap(GenerationSizer* policy) :
85 CollectedHeap(), _collector_policy(policy), _death_march_count(0) { }
86
87 // For use by VM operations
88 enum CollectionType {
89 Scavenge,
90 MarkSweep
91 };
92
93 virtual Name kind() const {
94 return CollectedHeap::ParallelScavengeHeap;
95 }
96
97 virtual const char* name() const {
98 return "Parallel";
99 }
100
101 virtual CollectorPolicy* collector_policy() const { return _collector_policy; }
102
103 virtual GrowableArray<GCMemoryManager*> memory_managers();
104 virtual GrowableArray<MemoryPool*> memory_pools();
105
106 static PSYoungGen* young_gen() { return _young_gen; }
107 static PSOldGen* old_gen() { return _old_gen; }
108
109 virtual PSAdaptiveSizePolicy* size_policy() { return _size_policy; }
110
111 static PSGCAdaptivePolicyCounters* gc_policy_counters() { return _gc_policy_counters; }
112
113 static ParallelScavengeHeap* heap();
114
115 static GCTaskManager* const gc_task_manager() { return _gc_task_manager; }
116
117 AdjoiningGenerations* gens() { return _gens; }
118
119 // Returns JNI_OK on success
120 virtual jint initialize();
121
122 void post_initialize();
123 void update_counters();
124
|