首页
学习
活动
专区
工具
TVP
发布
您找到你想要的搜索结果了吗?
是的
没有找到

InetAddress.getLocalHost() 执行很慢

这里有几个地方需要注意: 即使 hosts 文件中添加主机名,标准 Linux 的 getaddrinfo 方法执行时,也会有接近两秒的耗时,但我们在 Java 代码中运行时却只有几十毫秒; 前文我们使用...Wireshark 抓包时提到,mdns 查询时存在重试机制,但标准 Linux 的 getaddrinfo 方法中没有看到对应的代码; 前面提到的5秒返回结果,其实不是返回结果,而是超时了。...但标准 Linux 的 getaddrinfo 方法中没有看到对应的超时控制代码; 因此,我们可以大胆猜测 MaxOS 系统对标准 Linux 代码进行了修改,加了本地缓存、重试、超时等机制。...它内部调用了操作系统的 getifaddrs 方法,以获取本机所有 ip 地址:对应的源码可以参考https://codebrowser.dev/glibc/glibc/sysdeps/unix/sysv/linux...使用多种技术手段研究背后的原理,包括使用 Wireshark 抓包,使用 Arthas 工具定位到性能瓶颈,再转到 jdk 中查看对应的 native 方法实现,由于没找到最底层调用链路源码,转而参照标准Linux

4.3K40
领券