Почему нет способа получить фактический размер стека? - PullRequest
6 голосов
/ 12 февраля 2012

Я понимаю, что нет способа получить размер стека потока в Java во время выполнения (см. Можно ли получить фактический размер стека, используемый потоком в Java после некоторого времени выполнения? ).

Например, если мы создадим java.lang.Thread с указанием размера стека 64 * 1024, JVM может предоставить нам поток с any размер стека.

Тем не менее, я считаю, что на самом деле знание фактического размера стека очень полезно для некоторых приложений, которым требуется такая информация.

По какой причине у нас нетметод, который сообщает нам фактическое число байтов, используемых для стека?

Есть ли какое-то ограничение в архитектуре, которое делает невозможным получение фактического количества байтов для потока

1 Ответ

3 голосов
/ 12 февраля 2012

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

  • Локальные переменные типа byte, char, int, long, float, double, самые длинные из них - doubleчто составляет 8 байт
  • Ссылки на объекты - 4 байта на 32-битном vm, 8 байтов на 64-битном vms (возможно, короче, 48-битные ссылки используются для экономии места)

Примечаниечто массивы являются типами объектов, поэтому они хранятся в куче, также если у вас есть примитив, являющийся полем в классе, то примитив является частью объекта и, следовательно, будет храниться в куче.

Так что довольно сложно нехватить места в стеке для потока, если у вас нет рекурсии на ВПП.Я полагаю, что это причина, по которой дизайнеры Java не дают вам способа узнать размер стека.

Еще одна причина не указывать размер стека состоит в том, что это могут быть детали реализации, которые вы можетеничего не поделаешь, вы не можете изменить размер стека потока после того, как вы создали поток, и вы не можете сделать арифметику указателей, так какой смысл знать размер стека?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...