Mercurial > hg > graal-compiler
comparison agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegion.java @ 20276:1526a938e670
8047818: G1 HeapRegions can no longer be ContiguousSpaces
Summary: Change parent of G1OffsetTableContigSpace to CompactibleSpace, reimplement missing functionality
Reviewed-by: stefank, jmasa, tschatzl
author | mgerdin |
---|---|
date | Thu, 26 Jun 2014 11:36:58 +0200 |
parents | 4f93f0d00802 |
children |
comparison
equal
deleted
inserted
replaced
20275:e5035defa3c4 | 20276:1526a938e670 |
---|---|
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 package sun.jvm.hotspot.gc_implementation.g1; | 25 package sun.jvm.hotspot.gc_implementation.g1; |
26 | 26 |
27 import java.util.ArrayList; | |
28 import java.util.List; | |
27 import java.util.Observable; | 29 import java.util.Observable; |
28 import java.util.Observer; | 30 import java.util.Observer; |
29 | |
30 import sun.jvm.hotspot.debugger.Address; | 31 import sun.jvm.hotspot.debugger.Address; |
31 import sun.jvm.hotspot.memory.ContiguousSpace; | 32 import sun.jvm.hotspot.memory.CompactibleSpace; |
33 import sun.jvm.hotspot.memory.MemRegion; | |
32 import sun.jvm.hotspot.runtime.VM; | 34 import sun.jvm.hotspot.runtime.VM; |
35 import sun.jvm.hotspot.types.AddressField; | |
33 import sun.jvm.hotspot.types.CIntegerField; | 36 import sun.jvm.hotspot.types.CIntegerField; |
34 import sun.jvm.hotspot.types.Type; | 37 import sun.jvm.hotspot.types.Type; |
35 import sun.jvm.hotspot.types.TypeDataBase; | 38 import sun.jvm.hotspot.types.TypeDataBase; |
36 | 39 |
37 // Mirror class for HeapRegion. Currently we don't actually include | 40 // Mirror class for HeapRegion. Currently we don't actually include |
38 // any of its fields but only iterate over it (which we get "for free" | 41 // any of its fields but only iterate over it. |
39 // as HeapRegion ultimately inherits from ContiguousSpace). | |
40 | 42 |
41 public class HeapRegion extends ContiguousSpace { | 43 public class HeapRegion extends CompactibleSpace { |
42 // static int GrainBytes; | 44 // static int GrainBytes; |
43 static private CIntegerField grainBytesField; | 45 static private CIntegerField grainBytesField; |
46 static private AddressField topField; | |
44 | 47 |
45 static { | 48 static { |
46 VM.registerVMInitializedObserver(new Observer() { | 49 VM.registerVMInitializedObserver(new Observer() { |
47 public void update(Observable o, Object data) { | 50 public void update(Observable o, Object data) { |
48 initialize(VM.getVM().getTypeDataBase()); | 51 initialize(VM.getVM().getTypeDataBase()); |
52 | 55 |
53 static private synchronized void initialize(TypeDataBase db) { | 56 static private synchronized void initialize(TypeDataBase db) { |
54 Type type = db.lookupType("HeapRegion"); | 57 Type type = db.lookupType("HeapRegion"); |
55 | 58 |
56 grainBytesField = type.getCIntegerField("GrainBytes"); | 59 grainBytesField = type.getCIntegerField("GrainBytes"); |
60 topField = type.getAddressField("_top"); | |
61 | |
57 } | 62 } |
58 | 63 |
59 static public long grainBytes() { | 64 static public long grainBytes() { |
60 return grainBytesField.getValue(); | 65 return grainBytesField.getValue(); |
61 } | 66 } |
62 | 67 |
63 public HeapRegion(Address addr) { | 68 public HeapRegion(Address addr) { |
64 super(addr); | 69 super(addr); |
65 } | 70 } |
71 | |
72 public Address top() { | |
73 return topField.getValue(addr); | |
74 } | |
75 | |
76 @Override | |
77 public List getLiveRegions() { | |
78 List res = new ArrayList(); | |
79 res.add(new MemRegion(bottom(), top())); | |
80 return res; | |
81 } | |
82 | |
83 @Override | |
84 public long used() { | |
85 return top().minus(bottom()); | |
86 } | |
87 | |
88 @Override | |
89 public long free() { | |
90 return end().minus(top()); | |
91 } | |
66 } | 92 } |