[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ustroystvo-pk-i-seti-chto-takoe-virtualnaya-pamyat":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":22,"progress":23,"seo":24},1151,"chto-takoe-virtualnaya-pamyat",7,"ustroystvo-pk-i-seti","Устройство ПК и сети","🖥️","Что такое виртуальная память?","Виртуальная память — это механизм управления памятью, при котором каждый процесс работает со своим собственным виртуальным адресным пространством, которое отображается на физическую оперативную память (и диск) средствами ОС и аппаратного обеспечения (MMU).\n\n> Аналогия: каждому жильцу многоквартирного дома кажется, что у него «квартира номер 1 на первом этаже». На самом деле управляющая компания (ОС) расселяет всех по разным физическим квартирам, а жильцы об этом не знают. Если физических квартир не хватает — часть вещей временно вывозят на склад (swap).\n\n### Зачем нужна виртуальная память\n\n+ **Изоляция процессов** — каждый процесс видит только свою память и не может повредить память другого процесса.\n+ **Абстракция** — процесс думает, что у него есть непрерывное адресное пространство, хотя в физической памяти данные могут быть разбросаны.\n+ **Расширение памяти** — суммарный объём виртуальной памяти всех процессов может превышать объём физической RAM за счёт использования диска (swap).\n\n### Страничная организация (Paging)\n\n+ Виртуальное адресное пространство разбивается на **страницы (pages)** фиксированного размера (обычно 4 КБ).\n+ Физическая память разбивается на **фреймы (frames)** того же размера.\n+ **Таблица страниц (page table)** — структура данных, поддерживаемая ОС, которая хранит соответствие: виртуальная страница -> физический фрейм.\n+ Каждый процесс имеет собственную таблицу страниц.\n\n### Трансляция адреса\n\n1. Процесс обращается к виртуальному адресу.\n2. **MMU (Memory Management Unit)** — аппаратный блок в процессоре — разделяет адрес на номер страницы и смещение внутри страницы.\n3. По номеру страницы ищется физический фрейм в таблице страниц.\n4. Физический адрес = адрес фрейма + смещение.\n\n### TLB (Translation Lookaside Buffer)\n\n+ Специальный кэш в процессоре для хранения недавних трансляций «виртуальная страница -> физический фрейм».\n+ Обращение к TLB — 1-2 такта. Промах по TLB (TLB miss) требует обхода таблицы страниц — десятки тактов.\n+ TLB обычно содержит 64-1024 записи.\n+ При переключении между процессами TLB сбрасывается, что делает переключение контекста между процессами дорогим.\n\n### Подкачка (Swap)\n\n+ Когда физической памяти не хватает, ОС выгружает редко используемые страницы на диск (в swap-файл или swap-раздел).\n+ Когда процесс обращается к выгруженной странице, возникает **page fault** (страничная ошибка): ОС приостанавливает процесс, загружает страницу с диска обратно в RAM, обновляет таблицу страниц и возобновляет процесс.\n+ Page fault — очень дорогая операция (миллисекунды), поэтому частое использование swap резко снижает производительность.\n\n### Значение для Java-разработчика\n\n+ JVM-процесс работает в виртуальном адресном пространстве. Heap, стеки потоков, metaspace — всё это виртуальные адреса.\n+ Если JVM выделяет больше памяти, чем есть физической RAM, ОС начнёт swap, и GC-паузы могут вырасти с миллисекунд до секунд.\n+ Рекомендация для production: суммарная память всех JVM-процессов + ОС не должна превышать физическую RAM. Многие команды явно отключают swap на серверах (`swapoff -a`) или настраивают `vm.swappiness=0`.\n+ Huge Pages (2 МБ или 1 ГБ вместо 4 КБ) снижают нагрузку на TLB и могут улучшить производительность JVM с большим heap. Включаются через `-XX:+UseLargePages`.\n\n### Вывод\n\nВиртуальная память обеспечивает изоляцию процессов, абстракцию адресного пространства и возможность использовать больше памяти, чем есть физической RAM. Механизм основан на страничной организации и аппаратной трансляции адресов через MMU и TLB. Для Java-приложений критически важно не допускать ухода в swap.\n\n> **На собеседовании:** middle-вопрос. Ключевые моменты: что такое page table и TLB, почему переключение контекста между процессами дорого (сброс TLB), и почему swap — враг JVM-приложений в production. Если расскажете про Huge Pages — это бонус.","","middle",[15,16,17,18,19,20,21],"MMU","page fault","swap","computer-fundamentals","paging","TLB","виртуальная память",[],null,{"title":25,"description":26,"ogTitle":27,"ogDescription":28,"keywords":29,"schemaAnswer":34,"featuredSnippetReady":35},"Виртуальная память — paging, page fault, TLB, swap — Gymterview","Виртуальная память изолирует процессы и отображает виртуальные адреса на физические через таблицу страниц и MMU. TLB кэширует трансляции. Swap при нехватке RAM.","Виртуальная память — страницы, TLB и swap","Каждый процесс имеет своё виртуальное адресное пространство. MMU транслирует виртуальные адреса в физические через таблицу страниц. TLB кэширует трансляции.",[21,30,16,31,32,33],"paging страницы","TLB кэш","swap подкачка","MMU трансляция адресов","Виртуальная память — механизм, при котором каждый процесс работает со своим виртуальным адресным пространством, отображаемым на физическую RAM через MMU и таблицу страниц. Обеспечивает изоляцию процессов и абстракцию памяти. Страницы (4 КБ) могут выгружаться на диск (swap). Page fault — дорогая операция загрузки страницы с диска.",true]