annotate agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1Allocator.java @ 20404:227a9e5e4b4a

8057536: Refactor G1 to allow context specific allocations Summary: Splitting out a g1 allocator class to simply specialized allocators which can associate each allocation with a given context. Reviewed-by: mgerdin, brutisso
author sjohanss
date Fri, 05 Sep 2014 09:49:19 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20404
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
1 package sun.jvm.hotspot.gc_implementation.g1;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
2
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
3 import java.util.Observable;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
4 import java.util.Observer;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
5
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
6 import sun.jvm.hotspot.debugger.Address;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
7 import sun.jvm.hotspot.runtime.VM;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
8 import sun.jvm.hotspot.runtime.VMObject;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
9 import sun.jvm.hotspot.types.CIntegerField;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
10 import sun.jvm.hotspot.types.Type;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
11 import sun.jvm.hotspot.types.TypeDataBase;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
12
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
13 public class G1Allocator extends VMObject {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
14
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
15 //size_t _summary_bytes_used;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
16 static private CIntegerField summaryBytesUsedField;
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
17
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
18 static {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
19 VM.registerVMInitializedObserver(new Observer() {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
20 public void update(Observable o, Object data) {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
21 initialize(VM.getVM().getTypeDataBase());
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
22 }
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
23 });
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
24 }
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
25
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
26 static private synchronized void initialize(TypeDataBase db) {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
27 Type type = db.lookupType("G1Allocator");
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
28
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
29 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
30 }
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
31
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
32 public long getSummaryBytes() {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
33 return summaryBytesUsedField.getValue(addr);
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
34 }
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
35
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
36 public G1Allocator(Address addr) {
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
37 super(addr);
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
38
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
39 }
227a9e5e4b4a 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents:
diff changeset
40 }