torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 6 (Mustang)の解析

System.nanoTimeメソッドの実装について

ネイティブメソッドなので、ネイティブ側のCコードを追う必要があります。

Windows OS
利用可能であればWin32 APIのQueryPerformCounterを使用しています。そうでなければ、System.currentTimeMillisメソッドと同様のGetSystemTimeAsFileTimeを使用します。
Linux
利用可能であれば、clock_gettimeで第1引数にCLOCK_MONOTONICを渡しています。そうでなければ、gettimeofdayを使用します。
Solaris
gethrtimeを使用します。

InetAddress.isReachableメソッドの実装について

IPv4の場合、Inet4AddressImplクラスのisReachableメソッドの中で、nativeメソッドのisReachable0が呼び出されます。

Windows OS
WindowsのICMP/RAWソケットの実装があまりに信頼性がないためポート7へのTCPで実現しています。
Solaris
RAWソケットの作成にroot権限がないと失敗するので、そのときはポート7へのTCPで実現しています。