static void incrementKeepAliveCount(){
synchronized (keepAliveLock) {
    keepAliveCount++;
    if (reaper == null) {
      reaper=AccessController.doPrivileged(new NewThreadAction(new Reaper(),"Reaper",false));
      reaper.start();
    }
    if (gcLatencyRequest == null) {
      gcLatencyRequest=GC.requestLatency(gcInterval);
    }
  }
}

static void incrementKeepAliveCount ( ) { synchronized ( keepAliveLock ) { keepAliveCount ++ ; if ( reaper == null ) { reaper = AccessController . doPrivileged ( new NewThreadAction ( new Reaper ( ) , "Reaper" , false ) ) ; reaper . start ( ) ; } if ( gcLatencyRequest == null ) { gcLatencyRequest = GC . requestLatency ( gcInterval ) ; } } }
increments the " keep - alive count " . the " keep - alive count " is the number of non - permanent remote objects that are either in the object table or still have calls in progress . therefore , this method should be invoked exactly once for every non - permanent remote object exported ( a remote object must be exported before it can have any calls in progress ) . the vm is " kept alive " while the keep - alive count is greater than zero ; this is accomplished by keeping a non - daemon thread running . because non - permanent objects are those that can be garbage collected while exported , and thus those for which the " reaper " thread operates , the reaper thread also serves as the non - daemon vm keep - alive thread ; a new reaper thread is created if necessary .
