【发布时间】:2014-06-09 17:11:06
【问题描述】:
我有一个网络客户端,它重复执行一个操作,这取决于客户端计算机是否在非环回接口上具有 IPv6:
public void doTheThing() throws SocketException {
while (true) {
if (hasIPv6Address(NetworkInterface.getNetworkInterfaces())) {
doTheIPv6Thing();
} else {
doTheIPv4Thing();
}
}
}
private static boolean hasIPv6Address(Enumeration<NetworkInterface> intfs) throws SocketException {
while (intfs.hasMoreElements()) {
NetworkInterface intf = intfs.nextElement();
if (intf.isLoopback()) continue;
Enumeration<InetAddress> addresses = intf.getInetAddresses();
while (addresses.hasMoreElements()) {
if (addresses.nextElement() instanceof Inet6Address) return true;
}
if (hasIPv6Address(intf.getSubInterfaces())) return true;
}
return false;
}
这个程序有一个奇怪的堆外内存泄漏:Java堆是稳定的,线程数是稳定的,但是内存使用量还是会越来越大,直到程序被oom-killer杀死。为什么?
【问题讨论】:
标签: java memory-leaks ipv6