@ GuardedBy ( "evictionLock" ) void decreaseWindow ( ) { if ( windowMaximum ( ) <= 1 ) { return ; } long quota = Math . min ( - adjustment ( ) , Math . max ( 0 , windowMaximum ( ) - 1 ) ) ; setMainProtectedMaximum ( mainProtectedMaximum ( ) + quota ) ; setWindowMaximum ( windowMaximum ( ) - quota ) ; for ( int i = 0 ; i < QUEUE_TRANSFER_THRESHOLD ; i ++ ) { Node < K , V > candidate = accessOrderWindowDeque ( ) . peek ( ) ; if ( candidate == null ) { break ; } int weight = candidate . getPolicyWeight ( ) ; if ( quota < weight ) { break ; } quota -= weight ; setMainProtectedWeightedSize ( mainProtectedWeightedSize ( ) + weight ) ; setWindowWeightedSize ( windowWeightedSize ( ) - weight ) ; accessOrderWindowDeque ( ) . remove ( candidate ) ; accessOrderProbationDeque ( ) . add ( candidate ) ; candidate . makeMainProbation ( ) ; } setMainProtectedMaximum ( mainProtectedMaximum ( ) - quota ) ; setWindowMaximum ( windowMaximum ( ) + quota ) ; setAdjustment ( - quota ) ; }
Decreases the size of the admission window and increases the main s protected region .