В моем приложении я запускаю некоторые потоки с ненадежным кодом, поэтому мне нужно предотвратить переполнение памяти. У меня есть WatchDog, который анализирует время текущего потока (потоки вызывались в последовательном порядке). Но как я могу определить использование памяти? Я знаю только использование памяти всей ВМ с помощью Runtime.totalMemory()
? Если есть возможность узнать об использовании потока или использовании одного процесса, было бы замечательно. С использованием памяти в процессе я мог бы все равно вычислить использование потока.Использование потоков потока или процесса в Java
ответ
Поскольку JVM, исполняющий Java-программу, является процессом Java, вам не нужно беспокоиться об этом. Все потоки используют одно и то же пространство памяти в процессе JVM.
Поэтому достаточно, чтобы полагаться на
Что вам нужно сделать, это запустить ненадежный код в своем собственном процессе/JVM. Это возможно с использованием интерфейсов JNI (если это позволяет ваша операционная система).
Приложение Java не может контролировать объем памяти или (или ЦП), используемый его потоками, независимо от того, работает ли потоки надежного или ненадежного кода. Нет API для выполнения этого в JVM нового поколения. И, конечно же, нет API-интерфейсов для мониторинга использования потока в потоке. (Даже не ясно, что это значимая концепция ...)
Единственный способ гарантировать использование ресурсов ненадежного кода Java - это запустить код в отдельной JVM и использовать уровень операционной системы средства управления ресурсами (такие как ulimit, nice, sigstop и т. д.) и «-Xmx», чтобы ограничить использование ресурсов JVM.
Некоторое время назад, вс произведенный JSR 121, направленные на решение этой проблемы. Этот JSR позволит разделить приложение на части (называемые «изоляты»), которые передаются через передачу сообщений, и предложили возможность одного изолировать для контроля и управления другим. К сожалению, API-интерфейсы Isolate еще не реализованы в любой основной JVM-среде.
- 1. Ошибка потока Java-потоков
- 2. Использование потоков в Java
- 3. Пулы потоков Java - номер потока в журналах
- 4. Использование процесса в Java
- 5. Использование потоков Java определяет, превышает ли подмножество потока порог
- 6. Трассировка потока меток относительно потоков в java.
- 7. Использование prctl PR_SET_NAME для установки имени для процесса или потока?
- 8. Выполнение отдельного процесса или потока в Qt
- 9. Поиск использования кучи потока процесса в qnx
- 10. Использование потока для захвата выходного процесса
- 11. Чтение потока внешнего процесса с помощью Java
- 12. Использование потоков в приложении
- 13. Java многопоточность - 6 потоков или 30 потоков?
- 14. Получение идентификатора потока для потоков Java в Linux
- 15. Процессы Java против потоков для привязки потоков
- 16. Java - Повторное использование пула потоков
- 17. Как ограничить использование процесса (пользователя или процесса)
- 18. Соответствующее использование потоков в Android
- 19. Прерывание потока в Java
- 20. Rails Создание нового потока или фонового процесса
- 21. Приоритет процесса против приоритета потока
- 22. Убийство Java-процесса началось с потока
- 23. Java - Чтение выходного потока существующего процесса
- 24. Двигатель процесса/рабочего потока
- 25. Сохранение потока дочерних потоков
- 26. Список текущих потоков внешнего процесса
- 27. Повторное использование потока в Java 8
- 28. Запуск внешней программы как потока вместо процесса
- 29. Создание процесса потоков в C++
- 30. Использование потоков в анимации в Java
По определению поток имеет то же пространство памяти, что и другие потоки процесса. Ваш вопрос не имеет большого смысла. JVM = процесс. 1 имеет много потоков. –
JVM = процесс, это означает, что каждый процесс java имеет собственную JVM? – Nicolas
Да. Когда вы запускаете java, вы запускаете новую JVM. –