JavaRush /Java блог /Random UA /Кава-брейк #60. Як працює складання сміття в Java (JVM). ...

Кава-брейк #60. Як працює складання сміття в Java (JVM). 15 важливих питань про Spring на технічному співбесіді

Стаття з групи Random UA

Як працює складання сміття в Java (JVM)

Джерело: DZone

Процес складання сміття в Java

Складання сміття Java автоматично виділяє і звільняє пам'ять, тому розробникам не потрібно писати окрему програму для управління пам'яттю, що є однією з основних переваг програмування Java. Кожного разу, коли Java-програма запускається на JVM, об'єкти створюються в купі (heap) і є частиною пам'яті, призначену для програми. Згодом деякі предмети більше не знадобляться. Складальник сміття знаходить ці об'єкти, що не використовуються, і видаляє їх, щоб звільнити пам'ять.Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді.Складальник сміття, оцінивши купу пам'яті, визначить, які об'єкти використовуються, а які ні, і видалить об'єкти, що не використовуються. Використовуваний об'єкт або об'єкт, на який є посилання, означає, що деяка частина вашої програми все ще підтримує вказівник цього об'єкта. Якщо об'єкт вже не використовується або на нього немає посилань, то якась частина програми на нього більше не посилатиметься. Таким чином, пам'ять, яка використовується об'єктом, на який немає посилання, може бути звільнена шляхом складання сміття. Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді - 2Звільнення пам'яті можна описати трьома основними процесами:
  1. Маркування.
  2. Звичайне видалення.
  3. Видалення із ущільненням.
Маркування - це процес ідентифікації частин пам'яті, які використовуються та не використовуються збирачем сміття. Зазвичай маркування є першим етапом. Звичайне видалення – процес видалення об'єктів, на які немає посилань, з залишенням у вільному просторі об'єктів та покажчиків, на які є посилання. Видалення з ущільненням — крім видалення об'єктів, на які немає посилань, воно стискає об'єкти, що залишабося, на які є посилання, переміщуючи об'єкти разом, щоб зробити нове виділення пам'яті набагато простіше і швидше.

JVM Heap Memory

Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді - 3

Young Generation

Новостворені об'єкти починаються в Young Generation. Його ще називають ясла, тому що тут починають жити нові об'єкти. Young Generation поділяється на Eden Space, де починаються все нові об'єкти, і два простори Survivor, де об'єкти переміщаються з Eden після збереження (surviving) в одному циклі складання сміття. Вони викликають повторне складання сміття, коли об'єкти збираються збирачем сміття з Young Generation. Eden Space Усі нові об'єкти спочатку створюються в Eden Space. Незначний збір сміття спрацює, коли він досягне порога, що визначається JVM. Згадані об'єкти переміщуються з Eden Space у простір першого збереження ('Eden' and 'from' —> 'to'). Об'єкти, на які немає посилань, видаляються під час очищення Eden Space. Survivor 0 (S0) та Survivor 1 (S1) Обидва поля survivor (From and to) починаються порожніми. Коли відбувається повторне складання сміття, всі об'єкти, на які є посилання, переміщуються в простір, що залишився. Коли складання сміття закінчиться, місця (імена) survivor «from» і «to» змінюються місцями. Якщо під час попереднього складання сміття S1 був у ролі «to», то тепер S1 заповнений і стає «from». Відповідно, якщо S0 порожньо, воно стане «to».

Old Generation

Після незначного складання сміття, коли застарілі об'єкти досягають певного порога віку (за замовчуванням поріг сучасних JVM встановлено на 15 циклів складання сміття), вони разом з об'єктами-довгожителі переходять з молодого покоління до старого. Оскільки другорядні збирачі сміття продовжують виникати, об'єкти продовжують переміщатися в простір Old Generation, воно почне заповнюватись і відбудеться основний збір сміття. Основне складання сміття відбувається, коли об'єкти збираються збирачем сміття Old Generation. Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді - 4

Permanent Generation

Метадані, такі як класи та методи, зберігаються у Permanent Generation (постійному поколінні). Класи, які більше не використовуються, можуть бути видалені збирачем сміття. Під час повного збору сміття об'єкти всіх поколінь, що не використовуються, збираються.Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді - 5

Типи складання сміття

Складання сміття, що очищає різні частини всередині купи, часто називають Minor, Major та Full зборками сміття. Але оскільки терміни Minor, Major і Full широко використовуються і без належного визначення, ми розглянемо пояснення всіх цих типів складання сміття.

Minor Garbage Collection

Складання сміття з простору Young Generation називається Minor Garbage Collection. Цей тип збірки завжди запускається, коли JVM не може виділити місце для нового об'єкта, тобто, коли Eden Space заповнюється. Таким чином, що вища швидкість виділення, то частіше відбувається Minor Garbage Collection.

Major Garbage Collection

Major Garbage Collection очищає Tenured (старий простір). Оскільки Old Generation більше за розміром, збирання відбувається рідше, ніж у Young Generation. Коли об'єкти зникають з Old Generation, ми говоримо, що відбулося «велике збирання сміття». Складальник Old Generation спробує передбачити, коли йому потрібно розпочати складання, щоб уникнути невдач у просуванні з боку Young Generation. Складачі відстежують поріг заповнення для Old Generation і розпочинають складання, коли цей поріг перевищений. Якщо цього порогу замало задоволення вимог просування, запускається «Full Garbage Collection».

Full Garbage Collection

Full Garbage Collection очищає всю купу як молоді, так і старі простори. Багато хто плутається між Major (тільки OLD покоління) та Full GC (Young + OLD (Heap)). Full Garbage Collection включає просування всіх живих об'єктів від молодого до старого покоління після збирання та ущільнення старого покоління. Повне складання сміття буде зупинкою для Stop-the-World. Вона стежить, щоб нові об'єкти не виділялися і об'єкти не ставали недоступними під час роботи збирача.

15 важливих питань про Spring на технічному співбесіді

Джерело: Dev.to Spring Framework – це універсальний фреймворк для платформи Java. Його основні функції можуть використовуватися будь-яким додатком Java, також є розширення для створення веб-додатків на основі Java EE. Представляємо вашій увазі список питань та відповідей на співбесіді щодо кодування на Spring. Сподіваємося, що вони допоможуть вам підготуватися до технічної співбесіди у 2021 році.Кава-брейк #61.  Як працює складання сміття в Java (JVM).  15 важливих питань про Spring на технічному співбесіді - 6

1. Що таке Spring?

Відповідь: Spring - це фреймворк з відкритим вихідним кодом для розробки програм Java. Основні функції Spring Framework можна використовувати при розробці будь-якої програми Java, також є розширення для створення веб-застосунків на основі платформи Java EE. Фреймворк Spring націлений на спрощення використання J2EE у розробці та покращення практики програмування шляхом включення моделі на основі POJO (Plain Old Java Object).

2. Яка область дії за замовчуванням у bean-компонента Spring framework?

Відповідь: Область дії bean-компонента за замовчуванням – Singleton (шаблон проектування).

3. Що таке Bean wiring?

Відповідь: Bean wiring (підключення Bean) - це дія зі створення асоціацій між компонентами програми (beans) у контейнері Spring.

4. Що таке Spring Security?

Відповідь: Spring Security — це окремий модуль інфраструктури Spring, який фокусується на наданні методів автентифікації та авторизації у програмах Java. Він також усуває більшість поширених уразливостей безпеки, таких як атаки CSRF. Щоб використовувати Spring Security у веб-застосунках, можна почати з простої анотації: @EnableWebSecurity.

5. Що міститься у визначенні bean-компонента?

Відповідь: Визначення bean-компонента містить інформацію, звану метаданими конфігурації, яка необхідна контейнеру, щоб знати таке:
  • Як створити bean;
  • Подробиці життєвого циклу bean;
  • Залежність bean.

6. Що таке Spring Boot?

Відповідь: Spring Boot — це проект, який надає попередньо налаштований набір фреймворків для зменшення шаблонної конфігурації, щоб ви могли запускати та запускати програму Spring з мінімальним обсягом коду.

7. Що таке DispatcherServlet і навіщо він використовується?

Відповідь: DispatcherServlet – це реалізація шаблону проектування Front Controller, який обробляє всі вхідні веб-запити до Spring MVC. Шаблон Front Controller (шаблон проектування корпоративної програми) — це поширений шаблон у веб-додатках, завдання якого полягає в отриманні всього запиту та його маршрутизації до різних компонентів програми для фактичної обробки. Spring MVC DispatcherServlet використовується для пошуку правильного контролера для обробки запиту. Це робиться за допомогою зіставлення обробників: наприклад, інструкції @RequestMapping.

8. Чи потрібний spring-mvc.jar у дорозі до класів чи він є частиною spring-core?

Відповідь: Spring-mvc.jar є частиною spring-core, що означає, що якщо ви хочете використовувати інфраструктуру Spring MVC у своєму проекті Java, то ви повинні включити її spring-mvc.jar у шлях до класів вашої програми. У програмі Java spring-mvc.jar зазвичай розміщується в папці /WEB-INF/lib.

9. Які переваги використання Spring?

Відповідь: Нижче наведено список деяких переваг використання Spring Framework:
  • Легкість Spring відносно легкий, коли справа стосується розміру і прозорості. Базова версія Spring Framework складає близько 2 МБ.
  • Інверсія управління (Inversion of control, IOC) - Слабка пов'язаність (loose coupling) досягається в Spring з використанням техніки інверсії управління. Об'єкти надають свої залежності замість того, щоб створювати чи шукати залежні об'єкти.
  • Аспектно-орієнтованість - Spring підтримує аспектно-орієнтоване програмування та забезпечує узгоджену розробку, відокремлюючи бізнес-логіку програми від системних служб.
  • Контейнери - Spring Container створює об'єкти, зв'язує їх разом, налаштовує та керує ними від створення до моменту видалення.
  • MVC Framework — веб-фреймворк Spring — це добре спроектований веб-фреймворк MVC, який забезпечує альтернативу таким веб-фреймворкам, як Struts або іншим зайво спроектованим або менш популярним веб-фреймворкам.
  • Керування транзакціями — Spring має узгоджений інтерфейс керування транзакціями, який може масштабуватися до локальної транзакції (наприклад, з використанням однієї бази даних) або глобальних транзакцій (наприклад, з використанням JTA).
  • Обробка виключень - Spring надає зручний API для перетворення винятків, пов'язаних з конкретною технологією (наприклад, викликаних JDBC, Hibernate або JDO) у узгоджені, неперевірені винятки.

10. Що таке Spring beans?

Відповідь: Spring beans – це екземпляри об'єктів, якими керує Spring Container. Вони створюються і підключаються фреймворком і поміщаються в «мішок об'єктів» (контейнер), звідки ви можете їх витягти. "Зв'язка" (wiring) - це те, що є використанням залежностей. Це означає, що ви можете просто сказати: «Мені потрібна ця річ», і фреймворк дотримуватиметься певних правил для отримання цього об'єкта.

11. Яка мета модуля Core Container?

Відповідь: Контейнер ядра забезпечує основні функції платформи Spring. Первинним компонентом основного контейнера є BeanFactory – реалізація шаблону Factory. BeanFactory застосовує Інверсію управління для поділу конфігурації та залежностей специфікації програми від фактичного програмного коду.

12. Що таке контекст програми (Application Context)?

Відповідь: На перший погляд, контекст програми такий самий, як і фабрика компонентів (bean factory). Обидва завантажують визначення bean-компонентів, об'єднують bean-компоненти разом та розподіляють їх за запитом. Але він також забезпечує:
  • Засіб для дозволу текстових повідомлень, включаючи підтримку інтернаціоналізації.
  • Загальний спосіб завантаження файлових ресурсів.
  • Події для beans, які зареєстровані як слухачі (listeners).

13. Як інтегрувати Java Server Faces (JSF) із Spring?

Відповідь: JSF і Spring дійсно мають ті самі функції, особливо в області сервісів Інверсії управління. Оголошуючи керовані компоненти JSF у файлі конфігурації faces-config.xml, Ви дозволяєте FacesServlet створювати екземпляр цього Bean-компонента під час запуску. Ваші сторінки JSF мають доступ до цих bean-компонентів та всіх їх властивостей. JSF і Spring можна інтегрувати двома способами: DelegatingVariableResolver : Spring поставляється з перетворювачем змінних JSF, який дозволяє використовувати JSF і Spring разом. DelegatingVariableResolver спочатку делегує пошук значень інтерпретатору за умовчанням базової реалізації JSF, а потім бізнес-контексту Spring WebApplicationContext. Це дозволяє легко впроваджувати залежності в JSF-керовані компоненти. FacesContextUtils: VariableResolver, що настроюється, добре працює при відображенні своїх властивостей на bean-компоненти в faces-config.xml. Але якщо потрібно захопити bean-компонент, то клас FacesContextUtils це спрощує. Він схожий на WebApplicationContextUtils, за винятком того, що приймає параметр FacesContext, а не параметр ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Що таке Spring MVC framework?

Відповідь: Інфраструктура Spring Web MVC надає архітектуру model-view-controller та готові компоненти, які можна використовувати для розробки гнучких та слабко пов'язаних веб-додатків. Шаблон MVC призводить до поділу різних аспектів програми (логіка введення, бізнес-логіка та логіка інтерфейсу користувача), забезпечуючи при цьому слабкий зв'язок між цими елементами.

15. Як відбувається обробка подій у Spring?

Відповідь: Обробка в ApplicationContext забезпечується через ApplicationEvent клас і ApplicationListener інтерфейс. Тобто якщо bean-компонент реалізує ApplicationListener , то щоразу, коли ApplicationEvent публікується в ApplicationContext , цей bean-компонент реєструється. Дякуємо за читання та удачі у вашій технічній співбесіді!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ