hotspot/src/share/vm/gc/parallel/gcTaskThread.hpp
author tschatzl
Thu, 28 Jan 2016 13:30:12 +0100
changeset 35877 a2a62511d0f8
parent 30764 fec48bf5a827
child 38216 250794c6f95f
permissions -rw-r--r--
8146987: Improve Parallel GC Full GC by caching results of live_words_in_range() Summary: A large part of time in the parallel scavenge collector is spent finding out the amount of live words within memory ranges to find out where to move an object to. Try to incrementally calculate this value. Reviewed-by: tschatzl, mgerdin, jmasa Contributed-by: ray alex <sky1young@gmail.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 24331
diff changeset
     2
 * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 24331
diff changeset
    25
#ifndef SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 24331
diff changeset
    26
#define SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    28
#include "runtime/thread.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
// Forward declarations of classes defined here.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
class GCTaskThread;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
class GCTaskTimeStamp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
// Declarations of classes referenced in this file via pointer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
class GCTaskManager;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
class GCTaskThread : public WorkerThread {
11174
fccee5238e70 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 7397
diff changeset
    38
  friend class GCTaskManager;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  // Instance state.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  GCTaskManager* _manager;              // Manager for worker.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  const uint     _processor_id;         // Which processor the worker is on.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  GCTaskTimeStamp* _time_stamps;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  uint _time_stamp_index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  GCTaskTimeStamp* time_stamp_at(uint index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
11174
fccee5238e70 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 7397
diff changeset
    49
  bool _is_working;                     // True if participating in GC tasks
fccee5238e70 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 7397
diff changeset
    50
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  // Factory create and destroy methods.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  static GCTaskThread* create(GCTaskManager* manager,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
                              uint           which,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
                              uint           processor_id) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
    return new GCTaskThread(manager, which, processor_id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  static void destroy(GCTaskThread* manager) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
    if (manager != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
      delete manager;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  // Methods from Thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  bool is_GC_task_thread() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  virtual void run();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  // Methods.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  void start();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  void print_task_time_stamps();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
protected:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  // Constructor.  Clients use factory, but there could be subclasses.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  GCTaskThread(GCTaskManager* manager, uint which, uint processor_id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  // Destructor: virtual destructor because of virtual methods.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  virtual ~GCTaskThread();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  // Accessors.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  GCTaskManager* manager() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
    return _manager;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  uint which() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
    return id();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  uint processor_id() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
    return _processor_id;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  }
11174
fccee5238e70 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 7397
diff changeset
    88
  void set_is_working(bool v) { _is_working = v; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11174
diff changeset
    91
class GCTaskTimeStamp : public CHeapObj<mtGC>
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
{
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  jlong  _entry_time;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  jlong  _exit_time;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  char*  _name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  jlong entry_time()              { return _entry_time; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  jlong exit_time()               { return _exit_time; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  const char* name() const        { return (const char*)_name; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  void set_entry_time(jlong time) { _entry_time = time; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  void set_exit_time(jlong time)  { _exit_time = time; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  void set_name(char* name)       { _name = name; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   107
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 24331
diff changeset
   108
#endif // SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP