Mercurial > hg > truffle
diff src/share/vm/runtime/thread.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 | fb19af007ffc |
line wrap: on
line diff
--- a/src/share/vm/runtime/thread.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/thread.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -417,6 +417,9 @@ HandleArea* handle_area() const { return _handle_area; } void set_handle_area(HandleArea* area) { _handle_area = area; } + GrowableArray<Metadata*>* metadata_handles() const { return _metadata_handles; } + void set_metadata_handles(GrowableArray<Metadata*>* handles){ _metadata_handles = handles; } + // Thread-Local Allocation Buffer (TLAB) support ThreadLocalAllocBuffer& tlab() { return _tlab; } void initialize_tlab() { @@ -500,6 +503,9 @@ // Sweeper support void nmethods_do(CodeBlobClosure* cf); + // jvmtiRedefineClasses support + void metadata_do(void f(Metadata*)); + // Used by fast lock support virtual bool is_lock_owned(address adr) const; @@ -520,6 +526,7 @@ // Thread local handle area for allocation of handles within the VM HandleArea* _handle_area; + GrowableArray<Metadata*>* _metadata_handles; // Support for stack overflow handling, get_thread, etc. address _stack_base; @@ -790,18 +797,18 @@ GrowableArray<jvmtiDeferredLocalVariableSet*>* _deferred_locals_updates; // Handshake value for fixing 6243940. We need a place for the i2c - // adapter to store the callee methodOop. This value is NEVER live + // adapter to store the callee Method*. This value is NEVER live // across a gc point so it does NOT have to be gc'd // The handshake is open ended since we can't be certain that it will // be NULLed. This is because we rarely ever see the race and end up // in handle_wrong_method which is the backend of the handshake. See // code in i2c adapters and handle_wrong_method. - methodOop _callee_target; + Method* _callee_target; - // Oop results of VM runtime calls - oop _vm_result; // Used to pass back an oop result into Java code, GC-preserved - oop _vm_result_2; // Used to pass back an oop result into Java code, GC-preserved + // Used to pass back results to the interpreter or generated code running Java code. + oop _vm_result; // oop result is GC-preserved + Metadata* _vm_result_2; // non-oop result // See ReduceInitialCardMarks: this holds the precise space interval of // the most recent slow path allocation for which compiled code has @@ -1218,15 +1225,15 @@ void set_deopt_nmethod(nmethod* nm) { _deopt_nmethod = nm; } nmethod* deopt_nmethod() { return _deopt_nmethod; } - methodOop callee_target() const { return _callee_target; } - void set_callee_target (methodOop x) { _callee_target = x; } + Method* callee_target() const { return _callee_target; } + void set_callee_target (Method* x) { _callee_target = x; } // Oop results of vm runtime calls oop vm_result() const { return _vm_result; } void set_vm_result (oop x) { _vm_result = x; } - oop vm_result_2() const { return _vm_result_2; } - void set_vm_result_2 (oop x) { _vm_result_2 = x; } + Metadata* vm_result_2() const { return _vm_result_2; } + void set_vm_result_2 (Metadata* x) { _vm_result_2 = x; } MemRegion deferred_card_mark() const { return _deferred_card_mark; } void set_deferred_card_mark(MemRegion mr) { _deferred_card_mark = mr; } @@ -1389,6 +1396,9 @@ // Sweeper operations void nmethods_do(CodeBlobClosure* cf); + // RedefineClasses Support + void metadata_do(void f(Metadata*)); + // Memory management operations void gc_epilogue(); void gc_prologue(); @@ -1419,7 +1429,7 @@ // Returns method at 'depth' java or native frames down the stack // Used for security checks - klassOop security_get_caller_class(int depth); + Klass* security_get_caller_class(int depth); // Print stack trace in external format void print_stack_on(outputStream* st); @@ -1836,6 +1846,9 @@ static int _number_of_threads; static int _number_of_non_daemon_threads; static int _return_code; +#ifdef ASSERT + static bool _vm_complete; +#endif public: // Thread management @@ -1883,8 +1896,14 @@ // Sweeper static void nmethods_do(CodeBlobClosure* cf); + // RedefineClasses support + static void metadata_do(void f(Metadata*)); + static void gc_epilogue(); static void gc_prologue(); +#ifdef ASSERT + static bool is_vm_complete() { return _vm_complete; } +#endif // Verification static void verify();