question: 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 ) ; } } }
target:  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.