boolean refreshable() {
            if (address == null) {
                return false;
            }

            assert autoRefreshTimeoutFunction != null;

            if (autoRefreshTimeoutFunction == DEFAULT_AUTO_REFRESH_TIMEOUT_FUNCTION) {
                return true;
            }

            try {
                final long timeoutMillis = autoRefreshTimeoutFunction.applyAsLong(hostname);
                if (timeoutMillis == Long.MAX_VALUE) {
                    return true;
                }
                if (timeoutMillis <= 0) {
                    return false;
                }

                final long elapsedMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() -
                                                                         originalCreationTimeNanos);
                return elapsedMillis < timeoutMillis;
            } catch (Exception ex) {
                logger.warn("Unexpected exception while invoking 'autoRefreshTimeoutFunction.applyAsLong({})'",
                            hostname, ex);
                return false;
            }
        }
Closes all the resources allocated and used by this resolver.

<p>Please note that this method does not clear the {@link CacheEntry} because the
{@link #addressResolverCache} is created by {@link RefreshingAddressResolverGroup} and shared across
from all {@link RefreshingAddressResolver}s. {@link CacheEntry} is cleared when
{@link RefreshingAddressResolverGroup#close()} is called.
core/src/main/java/com/linecorp/armeria/client/RefreshingAddressResolver.java