除了浏览器缓存,本机缓存,Local DNS Server和gTLD外,在Java中JVM也是可以缓存DNS的解析结果,这个缓存是在InetAddress类中去完成的
InetAddress分两种缓存策略,如果想修改缓存的ttl时间属性,可以修改JDK当中的%JAVA_HOME%\lib\security\java.security进行配置
正确解析时的缓存:修改java.security文件中networkaddress.cache.ttl (默认值为-1,代表永不失效)
错误解析时的缓存:修改java.security文件中networkaddress.cache.negative.ttl (默认值为10,缓存10秒钟)
要修改JVM的缓存时间,可以通过如下几个方法:
直接修改java.security配置文件中的默认值
在Java启动时加入参数-Dsun.net.inetaddr.ttl=xxx修改默认值
通过InetAddress类进行动态的修改(利用InetAddress解析域名的时候,必须使用单利模式,因为如果每次都new一个实例,则每次都要进行一次完整的域名解析,非常耗时影响系统性能)