src/hotspot/share/gc/shenandoah/shenandoahRootVerifier.hpp
author zgu
Wed, 27 Nov 2019 11:52:57 -0500
changeset 59296 9186be5c78ba
parent 55476 aee0d296c0ef
permissions -rw-r--r--
8228720: Shenandoah: Implementation of concurrent class unloading Reviewed-by: rkennke
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54882
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     1
/*
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     2
 * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     3
 *
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     6
 * published by the Free Software Foundation.
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     7
 *
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     8
 * This code is distributed in the hope that it will be useful, but WITHOUT
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
     9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    11
 * version 2 for more details (a copy is included in the LICENSE file that
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    12
 * accompanied this code).
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    13
 *
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License version
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    15
 * 2 along with this work; if not, write to the Free Software Foundation,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    16
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    17
 *
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    18
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    19
 * or visit www.oracle.com if you need additional information or have any
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    20
 * questions.
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    21
 *
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    22
 */
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    23
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    24
#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHROOTVERIFIER_HPP
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    25
#define SHARE_GC_SHENANDOAH_SHENANDOAHROOTVERIFIER_HPP
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    26
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    27
#include "memory/allocation.hpp"
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    28
#include "memory/iterator.hpp"
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    29
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    30
class ShenandoahRootVerifier : public StackObj {
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    31
public:
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    32
  enum RootTypes {
59296
9186be5c78ba 8228720: Shenandoah: Implementation of concurrent class unloading
zgu
parents: 55476
diff changeset
    33
    None                = 0,
54882
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    34
    SerialRoots         = 1 << 0,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    35
    ThreadRoots         = 1 << 1,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    36
    CodeRoots           = 1 << 2,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    37
    CLDGRoots           = 1 << 3,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    38
    WeakRoots           = 1 << 4,
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    39
    StringDedupRoots    = 1 << 5,
55335
f7cc25dda38a 8225572: Shenandoah: Move JNIHandles root out of serial roots
zgu
parents: 55048
diff changeset
    40
    JNIHandleRoots      = 1 << 6,
f7cc25dda38a 8225572: Shenandoah: Move JNIHandles root out of serial roots
zgu
parents: 55048
diff changeset
    41
    AllRoots            = (SerialRoots | ThreadRoots | CodeRoots | CLDGRoots | WeakRoots | StringDedupRoots | JNIHandleRoots)
54882
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    42
  };
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    43
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    44
private:
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    45
  RootTypes _types;
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    46
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    47
public:
59296
9186be5c78ba 8228720: Shenandoah: Implementation of concurrent class unloading
zgu
parents: 55476
diff changeset
    48
  ShenandoahRootVerifier(RootTypes types = AllRoots);
54882
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    49
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    50
  void excludes(RootTypes types);
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    51
  void oops_do(OopClosure* cl);
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    52
55048
812212323fb1 8224751: Shenandoah: Shenandoah Verifier should select proper roots according to current GC cycle
zgu
parents: 54882
diff changeset
    53
  // Used to seed ShenandoahVerifier, do not honor root type filter
812212323fb1 8224751: Shenandoah: Shenandoah Verifier should select proper roots according to current GC cycle
zgu
parents: 54882
diff changeset
    54
  void roots_do(OopClosure* cl);
812212323fb1 8224751: Shenandoah: Shenandoah Verifier should select proper roots according to current GC cycle
zgu
parents: 54882
diff changeset
    55
  void strong_roots_do(OopClosure* cl);
55476
aee0d296c0ef 8226311: Shenandoah: Concurrent evacuation of OopStorage backed weak roots
zgu
parents: 55335
diff changeset
    56
aee0d296c0ef 8226311: Shenandoah: Concurrent evacuation of OopStorage backed weak roots
zgu
parents: 55335
diff changeset
    57
  static RootTypes combine(RootTypes t1, RootTypes t2);
54882
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    58
private:
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    59
  bool verify(RootTypes type) const;
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    60
};
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    61
b99e97bc5040 8223215: Shenandoah: Support verifying subset of roots
zgu
parents:
diff changeset
    62
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTVERIFIER_HPP