Mercurial > hg > truffle
diff src/share/vm/classfile/placeholders.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 | d2a62e0f25eb |
children | 070d523b96a7 |
line wrap: on
line diff
--- a/src/share/vm/classfile/placeholders.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/placeholders.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ public: PlaceholderTable(int table_size); - PlaceholderEntry* new_entry(int hash, Symbol* name, oop loader, bool havesupername, Symbol* supername); + PlaceholderEntry* new_entry(int hash, Symbol* name, ClassLoaderData* loader_data, bool havesupername, Symbol* supername); void free_entry(PlaceholderEntry* entry); PlaceholderEntry* bucket(int i) { @@ -56,14 +56,14 @@ } void add_entry(int index, unsigned int hash, Symbol* name, - Handle loader, bool havesupername, Symbol* supername); + ClassLoaderData* loader_data, bool havesupername, Symbol* supername); // This returns a Symbol* to match type for SystemDictionary Symbol* find_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); PlaceholderEntry* get_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); // caller to create a placeholder entry must enumerate an action // caller claims ownership of that action @@ -85,22 +85,22 @@ // If no entry exists, add a placeholder entry and push SeenThread // If entry exists, reuse entry and push SeenThread for classloadAction PlaceholderEntry* find_and_add(int index, unsigned int hash, - Symbol* name, Handle loader, + Symbol* name, ClassLoaderData* loader_data, classloadAction action, Symbol* supername, Thread* thread); void remove_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); // Remove placeholder information void find_and_remove(int index, unsigned int hash, - Symbol* name, Handle loader, Thread* thread); + Symbol* name, ClassLoaderData* loader_data, Thread* thread); // GC support. - void oops_do(OopClosure* f); + void classes_do(KlassClosure* f); // JVMTI support - void entries_do(void f(Symbol*, oop)); + void entries_do(void f(Symbol*)); #ifndef PRODUCT void print(); @@ -157,11 +157,11 @@ private: - oop _loader; // initiating loader + ClassLoaderData* _loader_data; // initiating loader bool _havesupername; // distinguish between null supername, and unknown Symbol* _supername; Thread* _definer; // owner of define token - klassOop _instanceKlass; // instanceKlass from successful define + Klass* _instanceKlass; // InstanceKlass from successful define SeenThread* _superThreadQ; // doubly-linked queue of Threads loading a superclass for this class SeenThread* _loadInstanceThreadQ; // loadInstance thread // can be multiple threads if classloader object lock broken by application @@ -176,9 +176,8 @@ // Simple accessors, used only by SystemDictionary Symbol* klassname() const { return literal(); } - oop loader() const { return _loader; } - void set_loader(oop loader) { _loader = loader; } - oop* loader_addr() { return &_loader; } + ClassLoaderData* loader_data() const { return _loader_data; } + void set_loader_data(ClassLoaderData* loader_data) { _loader_data = loader_data; } bool havesupername() const { return _havesupername; } void set_havesupername(bool havesupername) { _havesupername = havesupername; } @@ -192,9 +191,8 @@ Thread* definer() const {return _definer; } void set_definer(Thread* definer) { _definer = definer; } - klassOop instanceKlass() const {return _instanceKlass; } - void set_instanceKlass(klassOop instanceKlass) { _instanceKlass = instanceKlass; } - klassOop* instanceKlass_addr() { return &_instanceKlass; } + Klass* InstanceKlass() const {return _instanceKlass; } + void set_instanceKlass(Klass* InstanceKlass) { _instanceKlass = InstanceKlass; } SeenThread* superThreadQ() const { return _superThreadQ; } void set_superThreadQ(SeenThread* SeenThread) { _superThreadQ = SeenThread; } @@ -215,8 +213,8 @@ // Test for equality // Entries are unique for class/classloader name pair - bool equals(Symbol* class_name, oop class_loader) const { - return (klassname() == class_name && loader() == class_loader); + bool equals(Symbol* class_name, ClassLoaderData* loader) const { + return (klassname() == class_name && loader_data() == loader); } SeenThread* actionToQueue(PlaceholderTable::classloadAction action) { @@ -331,7 +329,7 @@ // GC support // Applies "f->do_oop" to all root oops in the placeholder table. - void oops_do(OopClosure* blk); + void classes_do(KlassClosure* closure); // Print method doesn't append a cr void print() const PRODUCT_RETURN;