< prev index next >

src/share/vm/classfile/metadataOnStackMark.hpp

Print this page
rev 6875 : 8056240: Investigate increased GC remark time after class unloading changes in CRM Fuse
Reviewed-by: mgerdin, coleenp, bdelsart

*** 24,45 **** #ifndef SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP #define SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP #include "memory/allocation.hpp" class Metadata; // Helper class to mark and unmark metadata used on the stack as either handles // or executing methods, so that it can't be deleted during class redefinition // and class unloading. // This is also used for other things that can be deallocated, like class // metadata during parsing, relocated methods, and methods in backtraces. class MetadataOnStackMark : public StackObj { NOT_PRODUCT(static bool _is_active;) public: ! MetadataOnStackMark(); ~MetadataOnStackMark(); ! static void record(Metadata* m); }; #endif // SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP --- 24,58 ---- #ifndef SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP #define SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP #include "memory/allocation.hpp" + #include "utilities/chunkedList.hpp" class Metadata; + typedef ChunkedList<Metadata*, mtInternal> MetadataOnStackBuffer; + // Helper class to mark and unmark metadata used on the stack as either handles // or executing methods, so that it can't be deleted during class redefinition // and class unloading. // This is also used for other things that can be deallocated, like class // metadata during parsing, relocated methods, and methods in backtraces. class MetadataOnStackMark : public StackObj { NOT_PRODUCT(static bool _is_active;) + + static volatile MetadataOnStackBuffer* _used_buffers; + static volatile MetadataOnStackBuffer* _free_buffers; + + static MetadataOnStackBuffer* allocate_buffer(); + static void retire_buffer(MetadataOnStackBuffer* buffer); + public: ! MetadataOnStackMark(bool visit_code_cache); ~MetadataOnStackMark(); ! ! static void record(Metadata* m, Thread* thread); ! static void retire_buffer_for_thread(Thread* thread); ! static bool has_buffer_for_thread(Thread* thread); }; #endif // SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP
< prev index next >