private OffHeapValueHolder<V> newCreateValueHolder(K key, V value, long now) {
    Duration duration = expiry.getExpiryForCreation(key, value);
    if (Duration.ZERO.equals(duration)) {
      return null;
    }

    if (duration.isForever()) {
      return new OffHeapValueHolder<V>(value, now, OffHeapValueHolder.NO_EXPIRE);
    } else {
      return new OffHeapValueHolder<V>(value, now, safeExpireTime(now, duration));
    }
  }
  private OffHeapValueHolder<V> newUpdatedValueHolder(
      K key, V value, OffHeapValueHolder<V> existing, long now) {
    Duration duration = expiry.getExpiryForUpdate(key, existing.value(), value);
    if (Duration.ZERO.equals(duration)) {
      return null;
    }

    if (duration == null) {
      return new OffHeapValueHolder<V>(
          value, now, existing.expirationTime(OffHeapValueHolder.TIME_UNIT));
    } else if (duration.isForever()) {
      return new OffHeapValueHolder<V>(value, now, OffHeapValueHolder.NO_EXPIRE);
    } else {
      return new OffHeapValueHolder<V>(value, now, safeExpireTime(now, duration));
    }
  }