Я просмотрел другие подобные вопросы по 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
В man-странице указано, что тип PSXSEM
- это POSIX-семафор. Вы знаете, для чего JDK использует POSIX-семафоры? BTW, приложение представляет собой однопоточное приложение командной строки на данный момент.
Потенциально полезный фон: я впервые заметил это после перехода на JDK 1.7 на Mac OS X 10.7.3:
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)
Обновление: repointing $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 по-другому?