| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Много ли ресурсов потребляет java.util.Timer? |
| Автор: lazycat 22.1.2016, 20:20 |
| Доброго времени суток всем! Кто хорошо знает класс java.util.Timer? Как много ресурсов потребляет он в режиме ожидания (задача запланирована, но еще не начата) ? Другими словами, как реализуется ожидание запуска запланированной задачи ? Хочу использовать его на очень-очень нагруженном сервере. Хочу с его помощью планировать задачи. Сама планируемая задача хоть и потребяет много ресурсов, но выполнять ее надо, это не обсуждается. Но что в этом плане можно сказать о Timer ? Если он будет активен сутками или даже неделями, не помешает ли он основным функциям сервера ? Есть ли с точки зрения потребления ресурсов разница между использованием таймера в обычном режиме (конструктор Timer()) и в режиме демона (конструктор Timer(boolean isDaemon)) ? Заранее благодарен за любую информацию. |
| Автор: lazycat 22.1.2016, 20:42 |
| Большое спасибо за ответ! Видимо я криво сформулировал свой вопрос. Я имел в виду ожидание в режиме запланированной задачи, а, следовательно, и выполнение метода 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 | ||
В документации нет ответа на этот вопрос, потому что спецификация JVM не оговаривает как должны реализовываться потоки lightweight или heavyweight. В принципе когда-то были реализации JVM с легковесными потоками. Но сейчас ситуация такова, что все актуальные реализации JVM используют тяжеловесные потоки. Добавлено через 1 минуту и 58 секунд Да, если так сильно беспокоит производительность то надо просто записать тестовый профайл выполнения. Будет интересно расскажу поподробней. |
| Автор: lazycat 27.1.2016, 13:20 | ||
Спасибо всем откликнувшимся
Да, очень интересно |
| Автор: 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 |
| Большое спасибо за информацию ! |