Я просмотрел другие подобные вопросы на SO, но они, похоже, вызваны другие вопросы.
Сначала я убедился, что благоразумно закрыл все дескрипторы файлов, а затем воспользовалсяlsof -p
для просмотра списка файлов.
Он остается довольно постоянным на протяжении всего времени выполнения, но периодически я получаю около 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? Кстати, на данный момент это приложение представляет собой однопоточное приложение командной строки.
Потенциально полезная предыстория :Я впервые заметил это после обновления до 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)
Обновление :, переназначающее $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 делает по-другому?