Hi,

please review this patch that refactors native java.net.NetworkInterface
lookup logic in a few ways to address both pre-existing and recent
regressions:

Bug:    https://bugs.openjdk.java.net/browse/JDK-8225239
Webrev: http://cr.openjdk.java.net/~redestad/8225239/open.01/

- adds a package-private method isBoundInetAddress that shortcuts
  some of the paths taken by existing methods when all we want to know
  is whether an IP address is bound to some interface on this system.
  This allows us to iterate over only IPv4 interfaces if the sought
  after IP address is an IPv4 address and vice versa for IPv6 addresses.
  This means a small (1.1x) to large (5x) speedup on a variety of
  systems, depending on how many IPv4 vs IPv6 interfaces exist on the
  system..

- refactors how the Windows-specific GetIPAddrTable API is used: current
  implementation looks up the global IP address table over and over,
  once per bound address, which means time spent by operations like
  NetworkInterface.getByInetAddress grows at least quadratically with
  the number of interfaces on a system. Refactoring these methods so
  that GetIPAddrTable is called once means a dramatic improvement on
  some of the API calls, e.g getByInetAddress cost drops from ~100ms to
  ~10ms on one of our larger test systems.

- Added some additional tests and a microbenchmark.

Testing: tier1-4 (some still ongoing, but all green so far)

Thanks!

/Claes

Reply via email to