java让host的修改立即生效

结论在文章结尾,我们先看过程

示例程序:

public static void main(String[] args) throws Exception {

        for (int i = 0; i < 100; i++) {
            InetAddress addresses = InetAddress.getByName("www.baidu.com");
            System.out.println(addresses.getHostAddress());
            System.out.println(addresses.getHostName());
            Thread.sleep(1000);
        }

    }

本地添加一条host:127.0.0.1 www.baidu.com

发现并没立即生效,大概30s之后生效的。
看了下源码,是从InetAddressHolder去拿的,以为这里做了文章。


image.png

但是发现InetAddress和InetAddressHolder都是一起改的,并没有什么因果关系


image.png

那重点就回到有的时候不改,不改的时候走的逻辑就是我们关注的地方了。


image.png

看到是用了cache的。那么cache什么情况下失效呢?


image.png

可以看到CacheEntry是有个expiration过期时间字段的。


image.png

过期时间是在哪里设置的呢?我们直接用这个字段来断点


image.png

看到是默认缓存30s,是在put进缓存的时候设置的。
这个30s是在哪里设置的呢,看到是InetAddressCachePolicy的cachePolicy字段来决定的。debug这个字段,看看是哪里修改的


image.png

可以看到默认是30s。

所以如果要禁止缓存的话,可以

1. 设置java.security.Security.setProperty("networkaddress.cache.ttl", "0");
2 jvm启动参数中设置-Dsun.net.inetaddr.ttl=0

当然我们也可以通过反射的方式,强行清空缓存:

public static void clearCache() throws NoSuchFieldException, IllegalAccessException {
        Field field = java.net.InetAddress.class.getDeclaredField("addressCache");
        field.setAccessible(true);
        Object addressCache = field.get(null);

        Field cacheMapField = addressCache.getClass().getDeclaredField("cache");
        cacheMapField.setAccessible(true);
        Map cacheMap = (Map) cacheMapField.get(addressCache);
        cacheMap.clear();
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 非常好的文章,怕博主删除,再也找不到这么好的文章了,所以复制了一份,博主是2016年写,但是是到现在为止看到的,思...
    吭声_cfdc阅读 6,065评论 0 4
  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 4,971评论 0 3
  • 一、前言 缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,...
    浪里行舟阅读 208,103评论 46 521
  • 一、前言 缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,...
    沉落的星星阅读 3,008评论 0 0
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 10,179评论 0 30

友情链接更多精彩内容