Top


定義場所(file name)

hotspot/src/share/vm/memory/referenceProcessor.cpp

名前(function name)

void ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive,
                                          OopClosure*        keep_alive,
                                          VoidClosure*       complete_gc) {

本体部(body)

  {- -------------------------------------------
  (1) (トレース出力)
      ---------------------------------------- -}

    #ifndef PRODUCT
      if (PrintGCDetails && PrintReferenceGC) {
        unsigned int count = count_jni_refs();
        gclog_or_tty->print(", %u refs", count);
      }
    #endif

  {- -------------------------------------------
  (1) Weak global JNI references (のうちで生きているもの) に対して, 
      keep_alive 引数で渡された Closure を適用する.
      ---------------------------------------- -}

      JNIHandles::weak_oops_do(is_alive, keep_alive);

  {- -------------------------------------------
  (1) 番兵(_sentinelRef)用のオブジェクトについても
      keep_alive 引数で渡された Closure を適用しておく.
      ---------------------------------------- -}

      // Finally remember to keep sentinel around
      keep_alive->do_oop(adr_sentinel_ref());

  {- -------------------------------------------
  (1) complete_gc 引数で渡された VoidClosure を用いて, 
      以上の処理で mark を付けられたオブジェクトから再帰的に辿れる範囲全てにも mark を付ける 
      (= 再帰的な到達範囲全てを live にする).
      ---------------------------------------- -}

      complete_gc->do_void();
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.