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

Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/classfile/metadataOnStackMark.hpp
          +++ new/src/share/vm/classfile/metadataOnStackMark.hpp
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20   20   * or visit www.oracle.com if you need additional information or have any
  21   21   * questions.
  22   22   *
  23   23   */
  24   24  
  25   25  #ifndef SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP
  26   26  #define SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP
  27   27  
  28   28  #include "memory/allocation.hpp"
       29 +#include "utilities/chunkedList.hpp"
  29   30  
  30   31  class Metadata;
  31   32  
       33 +typedef ChunkedList<Metadata*, mtInternal> MetadataOnStackBuffer;
       34 +
  32   35  // Helper class to mark and unmark metadata used on the stack as either handles
  33   36  // or executing methods, so that it can't be deleted during class redefinition
  34   37  // and class unloading.
  35   38  // This is also used for other things that can be deallocated, like class
  36   39  // metadata during parsing, relocated methods, and methods in backtraces.
  37   40  class MetadataOnStackMark : public StackObj {
  38   41    NOT_PRODUCT(static bool _is_active;)
       42 +
       43 +  static volatile MetadataOnStackBuffer* _used_buffers;
       44 +  static volatile MetadataOnStackBuffer* _free_buffers;
       45 +
       46 +  static MetadataOnStackBuffer* allocate_buffer();
       47 +  static void retire_buffer(MetadataOnStackBuffer* buffer);
       48 +
  39   49   public:
  40      -  MetadataOnStackMark();
  41      -  ~MetadataOnStackMark();
  42      -  static void record(Metadata* m);
       50 +  MetadataOnStackMark(bool visit_code_cache);
       51 +   ~MetadataOnStackMark();
       52 +
       53 +  static void record(Metadata* m, Thread* thread);
       54 +  static void retire_buffer_for_thread(Thread* thread);
       55 +  static bool has_buffer_for_thread(Thread* thread);
  43   56  };
  44   57  
  45   58  #endif // SHARE_VM_CLASSFILE_METADATAONSTACKMARK_HPP
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX