| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Runtime.get*Memory |
| Автор: KostenkoSergey 27.9.2006, 17:53 |
| для мониторинга памяти в яве 1.4 есть три метода. с максхип сайзом понятно, а вот эти два возвращают какие то совершенно не понятные мне значения runtime.freeMemory() runtime.totalMemory(), которые никак не зависят от изменения максхипсайза. Хочу предупредить outOfMemory, а именно уведомить пользователя, что объём используемой памяти приближается к критическому (скажем Vтек > max_heap_size - 20 Мбт (приложение серверное) ) Трудности с определением именно текущего объёма используемой памяти. Так например (totalMemory = 532 МБт freeMemory = 200), а память процесса java.exe = 980МБт (mxHeapSize = 1ГБт) Поясните ? |
| Автор: LSD 27.9.2006, 17:56 |
| totalMemory() - это текущий размер кучи, не JVM вообще а именно кучи freeMemory() - сколько свободно памяти в куче |
| Автор: KostenkoSergey 27.9.2006, 18:00 |
| а runtime.maxMemory() тогда что ? оутОфмемори возникает, когда памяти не хватает у JVM? как определить сколько памяти она сейчас съела ? |
| Автор: LSD 27.9.2006, 18:15 |
| maxMemory() - объем памяти который максимально может захватить себе JVM (JVM может динамически менять размер кучи в по необходимости) Поэксперементируй с ключами запуска: -Xmx и -Xms. Когда нехватает памяти в куче и размер кучи максимальный из возможного. По умолчанию Sun JVM берет себе 64Мб, или половину оперативной памяти машины (смотря что меньше). |
| Автор: KostenkoSergey 27.9.2006, 18:23 |
смотрел. Т.е. если я правильно понял, то для решения моей задачи можно использовать след. формулу: if (maxMemory() -totalMemory() < 20МБт) { System.out.println("Скоро оут оф мемори"); } |
| Автор: LSD 27.9.2006, 18:30 |
| Да. Только учти что иногда maxMemory() может вернуть Long.MAX_VALUE (если не ошибаюсь, то так вела себя Sun JDK 1.3). |
| Автор: KostenkoSergey 28.9.2006, 08:45 |
| решил проверить - пишу в логи totalMemory() - заметил, что он у меня не превышает 532Мбт (mx HeapSize = 800) возможно, правда, просто больше пока не было затребовано - ещё послежу... |
| Автор: KostenkoSergey 28.9.2006, 09:03 |
| а нет... LSD - Вы правы ... - растёт. Спасибо. |