WedX - журнал о программировании и компьютерных науках

Тест Java -Xms и -Xmx

я создаю класс Main, который содержит основной метод следующим образом:

public class Main {

    public static void main(String[] _args) {
    System.out.println("free:" + Runtime.getRuntime().freeMemory()
        + ". max:" + Runtime.getRuntime().maxMemory());
    }
}

затем я запускаю класс с -Xms2m и -Xmx2m. вывод такой:

free:2984840. max:7471104

тогда мой вопрос в том, что если мегабайт составляет 1048576 байт, то показанная свободная память не равна 2 мегабайтам, как указано в параметре -Xms. когда я увеличиваю параметр -Xms до 3 м, он показывает бесплатное добавление мегабайта. кто-нибудь может объяснить, что происходит,.?

другой случай происходит с параметром -Xmx, когда я увеличиваю его до 3 м, 4 м и 5 м, максимальное значение продолжает показывать 7471104, что составляет около 71,44 м. Я действительно не понимаю, как эти два варианта работают.

это то, что печатается, когда я устанавливаю -Xms3m и -Xmx6m

free:4033416. max:7471104

кто-нибудь может помочь.?

благодарю вас :)

примечания: я работаю с Win7 x64 и Java 1.6 с обновлением 35.

03.02.2013

  • Думаю, такое поведение из-за того, что вы выделяете слишком маленькую кучу. Также лучше отслеживать с помощью docs.oracle.com /javase/6/docs/technotes/tools/share/ и подключаемый модуль Visual gc. Потому что поведение метода Runtemie должно зависеть от реализации JVM. 03.02.2013
  • Я согласен с @Taky, я установил большие значения для своего приложения: -Xms100M -Xmx1500M, и результат печати выглядит следующим образом: бесплатно: 99129720. макс:1520435200 03.02.2013
  • Не могли бы вы попробовать размер 8, 16, 256, 512? 03.02.2013
  • я установил -Xms8m и -Xmx8m, результат: бесплатно: 7834504. макс: 8060928. 03.02.2013

Ответы:


1

JVM имеет ограничения в отношении того, как может быть выделена память, что не очевидно. Это означает, что он принимает только размеры, которые вы ему даете, как подсказку, которой будут следовать настолько строго, насколько это возможно. Для очень малых объемов памяти эти различия более существенны, но даже если вы попросите 20 ГБ, это не будет ровно 20 ГБ на байт.

03.02.2013

2

Куча содержит не только данные, выделенные вашим приложением, но и объекты, выделенные виртуальной машиной (например, объекты, представляющие классы). Занимаемая площадь виртуальной машины точки доступа определенно больше, чем установленный вами максимальный размер кучи. Вот почему фактический размер кучи больше.

03.02.2013
  • настройка Xmx с 2mb, 3mb, 4mb,... показывает, что максимум около 7mb. тогда почему если 8мб показывает именно 8мб,.? если установка Xmx как 2 МБ показывает 2 МБ + дополнительное пространство, почему 8 МБ показывает именно 8 МБ? хм,.. до сих пор понятия не имею,.. 04.02.2013
  • не могли бы вы использовать jmap с -gcutil и -gccapacity. Это покажет вам точный размер/занятость каждой области кучи. Это надежнее, чем вызов freeMemory()/maxMemory. 06.02.2013
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]