src/share/vm/gc_implementation/shared/concurrentGCThread.hpp

Thu, 13 Feb 2014 17:44:39 +0100

author
stefank
date
Thu, 13 Feb 2014 17:44:39 +0100
changeset 6971
7426d8d76305
parent 6906
581e70386ec9
child 7360
4e4ebe50c8e3
permissions
-rw-r--r--

8034761: Remove the do_code_roots parameter from process_strong_roots
Reviewed-by: tschatzl, mgerdin, jmasa

     1 /*
     2  * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     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
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP
    26 #define SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP
    28 #include "utilities/macros.hpp"
    29 #include "gc_implementation/shared/suspendibleThreadSet.hpp"
    30 #include "runtime/thread.hpp"
    32 class ConcurrentGCThread: public NamedThread {
    33   friend class VMStructs;
    35 protected:
    36   bool _should_terminate;
    37   bool _has_terminated;
    39   enum CGC_flag_type {
    40     CGC_nil           = 0x0,
    41     CGC_dont_suspend  = 0x1,
    42     CGC_CGC_safepoint = 0x2,
    43     CGC_VM_safepoint  = 0x4
    44   };
    46   static int _CGC_flag;
    48   static bool CGC_flag_is_set(int b)       { return (_CGC_flag & b) != 0; }
    49   static int set_CGC_flag(int b)           { return _CGC_flag |= b; }
    50   static int reset_CGC_flag(int b)         { return _CGC_flag &= ~b; }
    52   // Create and start the thread (setting it's priority high.)
    53   void create_and_start();
    55   // Do initialization steps in the thread: record stack base and size,
    56   // init thread local storage, set JNI handle block.
    57   void initialize_in_thread();
    59   // Wait until Universe::is_fully_initialized();
    60   void wait_for_universe_init();
    62   // Record that the current thread is terminating, and will do more
    63   // concurrent work.
    64   void terminate();
    66 public:
    67   // Constructor
    69   ConcurrentGCThread();
    70   ~ConcurrentGCThread() {} // Exists to call NamedThread destructor.
    72   // Tester
    73   bool is_ConcurrentGC_thread() const          { return true;       }
    74 };
    76 // The SurrogateLockerThread is used by concurrent GC threads for
    77 // manipulating Java monitors, in particular, currently for
    78 // manipulating the pending_list_lock. XXX
    79 class SurrogateLockerThread: public JavaThread {
    80   friend class VMStructs;
    81  public:
    82   enum SLT_msg_type {
    83     empty = 0,           // no message
    84     acquirePLL,          // acquire pending list lock
    85     releaseAndNotifyPLL  // notify and release pending list lock
    86   };
    87  private:
    88   // the following are shared with the CMSThread
    89   SLT_msg_type  _buffer;  // communication buffer
    90   Monitor       _monitor; // monitor controlling buffer
    91   BasicLock     _basicLock; // used for PLL locking
    93  public:
    94   static SurrogateLockerThread* make(TRAPS);
    96   SurrogateLockerThread();
    98   bool is_hidden_from_external_view() const     { return true; }
   100   void loop(); // main method
   102   void manipulatePLL(SLT_msg_type msg);
   104 };
   106 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP

mercurial