我已经查看了关于 SO 的其他类似问题,但它们似乎是由其他问题引起的。
首先,我确保我明智地关闭了所有文件句柄,然后我过去常常lsof -p <pid of java>
查看我的文件列表。
它在我的整个运行时保持不变,但我会定期获得大约 10,000 个条目,lsof
如下所示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
java 36809 smm *235r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *236r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *237r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *238r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *239r PSXSEM 0t0 kcms00008FC901624000
手册页说PSXSEM
类型是 POSIX 信号量。任何线索 JDK 使用 POSIX 信号量做什么?顺便说一句,该应用程序目前是一个单线程命令行应用程序。
潜在有用的背景:我在 Mac OS X 10.7.3 上升级到 JDK 1.7 后首先注意到这一点:
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
更新:重新指向$JAVA_HOME
JDK 1.6 似乎是解决该问题的方法。
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3635)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
JDK 1.7 有何不同?