Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Много ли ресурсов потребляет java.util.Timer?


Автор: lazycat 22.1.2016, 20:20
Доброго времени суток всем!

Кто хорошо знает класс java.util.Timer? Как много ресурсов потребляет он в режиме ожидания (задача запланирована, но еще не начата) ? Другими словами, как реализуется ожидание запуска запланированной задачи ?

Хочу использовать его на очень-очень нагруженном сервере. Хочу с его помощью планировать задачи. Сама планируемая задача хоть и потребяет много ресурсов, но выполнять ее надо, это не обсуждается. Но что в этом плане можно сказать о Timer ? Если он будет активен сутками или даже неделями, не помешает ли он основным функциям сервера ?

Есть ли с точки зрения потребления ресурсов разница между использованием таймера в обычном режиме (конструктор Timer()) и в режиме демона (конструктор Timer(boolean isDaemon)) ?

Заранее благодарен за любую информацию. 

Автор: LSD 22.1.2016, 20:29
Цитата(lazycat @  22.1.2016,  21:20 Найти цитируемый пост)
Как много ресурсов потребляет он в режиме ожидания (задача запланирована, но еще не начата) ?

Очень мало.


Цитата(lazycat @  22.1.2016,  21:20 Найти цитируемый пост)
Другими словами, как реализуется ожидание запуска запланированной задачи ?

Thread.sleep()
На тред усыпляется до момента Х.


Цитата(lazycat @  22.1.2016,  21:20 Найти цитируемый пост)
Есть ли с точки зрения потребления ресурсов разница между использованием таймера в обычном режиме (конструктор Timer()) и в режиме демона (конструктор Timer(boolean isDaemon)) ?

Нет.

Автор: lazycat 22.1.2016, 20:42
Большое спасибо за ответ!

Цитата(LSD @  22.1.2016,  20:29 Найти цитируемый пост)
Thread.sleep()
На тред усыпляется до момента Х.


Видимо я криво сформулировал свой вопрос. Я имел в виду ожидание в режиме запланированной задачи, а, следовательно, и выполнение метода Thread.sleep() реализуется Java-средствами или средствами операционной системы? Если провести аналогию с элементами интерфейса - это "lightweight" или "heavyweight" ?

(С вашей стороны логично будет отослать меня к документации, но, честное слово, искал и ничего не нашел в этом ключе).


Автор: mailer 23.1.2016, 11:39
Потоки в jvm реализуются нативными для каждой ОС функциями.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Mnogo-li-resursov-potreblyayet-javautilTimer-id56a26500ae2015af1f8b4567#findElement_E7045_56a33c57ae2015e1458b486f_0

Автор: LSD 24.1.2016, 23:22
Цитата(lazycat @  22.1.2016,  21:42 Найти цитируемый пост)
Видимо я криво сформулировал свой вопрос. Я имел в виду ожидание в режиме запланированной задачи, а, следовательно, и выполнение метода Thread.sleep() реализуется Java-средствами или средствами операционной системы? Если провести аналогию с элементами интерфейса - это "lightweight" или "heavyweight" ?

(С вашей стороны логично будет отослать меня к документации, но, честное слово, искал и ничего не нашел в этом ключе).

В документации нет ответа на этот вопрос, потому что спецификация JVM не оговаривает как должны реализовываться потоки lightweight или heavyweight.
В принципе когда-то были реализации JVM с легковесными потоками. Но сейчас ситуация такова, что все актуальные реализации JVM используют тяжеловесные потоки.

Добавлено через 1 минуту и 58 секунд
Да, если так сильно беспокоит производительность то надо просто записать тестовый профайл выполнения. Будет интересно расскажу поподробней.

Автор: lazycat 27.1.2016, 13:20
Спасибо всем откликнувшимся


Цитата(LSD @  24.1.2016,  23:22 Найти цитируемый пост)
Да, если так сильно беспокоит производительность то надо просто записать тестовый профайл выполнения. Будет интересно расскажу поподробней.



Да, очень интересно

Автор: LSD 27.1.2016, 18:50
Есть такая штука http://docs.oracle.com/javase/8/docs/technotes/guides/jvmti/index.html, это инструменты для профайлеров и дебагеров. Там можно получить много чего, в том числе и данные по загрузке процессора. Есть проект https://github.com/aragozin/jvm-tools который умеет все эти данные собирать, в принципе в данном случае будет достаточно https://github.com/aragozin/jvm-tools/blob/master/sjk-core/COMMANDS.md#ttop-command который переодически снимает нагрузку на процессор (по каждому  треду). Можно посмотреть глазами, можно посмотреть код и написать свой мини профайлер и писать данные в лог.

Автор: lazycat 17.2.2016, 21:32
Большое спасибо за информацию !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)