Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlass.java @ 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 | c18cbe5936b8 |
children | d8ce2825b193 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2000, 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. |
42 }); | 42 }); |
43 } | 43 } |
44 | 44 |
45 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { | 45 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { |
46 Type type = db.lookupType("objArrayKlass"); | 46 Type type = db.lookupType("objArrayKlass"); |
47 elementKlass = new OopField(type.getOopField("_element_klass"), Oop.getHeaderSize()); | 47 elementKlass = new MetadataField(type.getAddressField("_element_klass"), 0); |
48 bottomKlass = new OopField(type.getOopField("_bottom_klass"), Oop.getHeaderSize()); | 48 bottomKlass = new MetadataField(type.getAddressField("_bottom_klass"), 0); |
49 } | 49 } |
50 | 50 |
51 ObjArrayKlass(OopHandle handle, ObjectHeap heap) { | 51 public ObjArrayKlass(Address addr) { |
52 super(handle, heap); | 52 super(addr); |
53 } | 53 } |
54 | 54 |
55 private static OopField elementKlass; | 55 private static MetadataField elementKlass; |
56 private static OopField bottomKlass; | 56 private static MetadataField bottomKlass; |
57 | 57 |
58 public Klass getElementKlass() { return (Klass) elementKlass.getValue(this); } | 58 public Klass getElementKlass() { return (Klass) elementKlass.getValue(this); } |
59 public Klass getBottomKlass() { return (Klass) bottomKlass.getValue(this); } | 59 public Klass getBottomKlass() { return (Klass) bottomKlass.getValue(this); } |
60 | 60 |
61 public long computeModifierFlags() { | 61 public long computeModifierFlags() { |
69 arrayFlags = JVM_ACC_ABSTRACT | JVM_ACC_FINAL; | 69 arrayFlags = JVM_ACC_ABSTRACT | JVM_ACC_FINAL; |
70 } | 70 } |
71 return arrayFlags; | 71 return arrayFlags; |
72 } | 72 } |
73 | 73 |
74 public void iterateFields(OopVisitor visitor, boolean doVMFields) { | 74 public void iterateFields(MetadataVisitor visitor) { |
75 super.iterateFields(visitor, doVMFields); | 75 super.iterateFields(visitor); |
76 if (doVMFields) { | 76 visitor.doMetadata(elementKlass, true); |
77 visitor.doOop(elementKlass, true); | 77 visitor.doMetadata(bottomKlass, true); |
78 visitor.doOop(bottomKlass, true); | |
79 } | |
80 } | 78 } |
81 | 79 |
82 public Klass arrayKlassImpl(boolean orNull, int n) { | 80 public Klass arrayKlassImpl(boolean orNull, int n) { |
83 if (Assert.ASSERTS_ENABLED) { | 81 if (Assert.ASSERTS_ENABLED) { |
84 Assert.that(getDimension() <= n, "check order of chain"); | 82 Assert.that(getDimension() <= n, "check order of chain"); |