Где хранятся данные
Полезно отчетливо представлять, что происходит во время работы программы – и в частности, как данные размещаются в памяти. Существует пять разных мест для хранения данных:
- Регистры. Это самое быстрое хранилище, потому что данные хранятся прямо внутри процессора. Однако, количество регистров жестоко ограничено, поэтому регистры используются компилятором по мере необходимости. У вас нет прямого доступа к регистрам, вы не можете найти и малейших следов их поддержки в языке.
- Стек. Эта область хранения данных находится в общей оперативной памяти (RAM), но процессор предоставляет прямой доступ к ней с использованием указателя стека. Указатель стека перемещается вниз для выделения памяти или вверх для ее освобождения. Это чрезвычайно быстрый и эффективный способ размещения данных, по скорости уступающий только регистрам. Во время обработки программы, компилятор Java должен знать жизненный цикл данных, размещаемых в стеке. Это ограничение уменьшает гибкость ваших программ, поэтому, хотя некоторые данные Java хранятся в стеке (особенно ссылки на объекты), сами объекты Java не помещаются в стек.
- Куча. Пул памяти общего назначения (находится так же в RAM), в котором размещаются все объекты Java. Преимущество кучи состоит в том, что компилятору не обязательно знать, как долго просуществуют находящиеся там объекты. Таким образом, работа с кучей дает значительное преимущество в гибкости. Когда вам нужно создать объект, вы пишете код с использованием new , и память выделяется из кучи во время выполнения программы. Конечно, за гибкость приходится расплачиваться: выделение памяти из кучи занимает больше времени, чем в стеке.
- Постоянная память. Значения констант часто встраиваются прямо в код программы, так как они неизменны. Иногда такие данные могут размещаться в постоянной памяти (ROM), если речь идет о встроенных системах.
-
Не-оперативная память. Если данные располагаются вне программы, они могут существовать и тогда, когда она не выполняется. Два основных примера: потоковые объекты (streamed objects), в которых объекты представлены в виде потока байтов, обычно используются для посылки на другие машины, и долгоживущие (persistent) объекты, которые запоминаются на диске и сохраняют свое состояние даже после окончания работы программы. Особенностью этих видов хранения данных является возможность перевода объектов в нечто, что может быть сохранено на другом носителе информации, а потом восстановлено в виде обычного объекта, хранящегося в оперативной памяти. В Java организована поддержка легковесного (lightweight) сохранения состояния, а такие механизмы, как JDBC и Hibernate, представляют более совершенную поддержку сохранения и выборки информации об объектах из баз данных.
Конец







Я могу конечно ошибаться но во время прочтения статьи может сложиться впечатление , что хоть мы и не имеем возможности обращения непосредственно к данным в регистрах , но нужно уточнить здесь речь идет о регистрах стеках имулируемых java машиной при помощи операционной системы и являющимися воображаемыми компонентами java машины ,это не реальное железо (в отношении java) .
Я могу конечно ошибаться но во время прочтения статьи может сложиться впечатление , что хоть мы и не имеем возможности обращения непосредственно к данным в регистрах , но нужно уточнить здесь речь идет о регистрах стеках имулируемых java машиной при помощи операционной системы и являющимися воображаемыми компонентами java машины ,это не реальное железо (в отношении java) .
Отправить комментарий