JavaRush /Blog Java /Random-PL /Przerwa kawowa #60. Jak działa odśmiecanie w Javie (JVM)....

Przerwa kawowa #60. Jak działa odśmiecanie w Javie (JVM). 15 ważnych pytań o wiosnę w rozmowie technicznej

Opublikowano w grupie Random-PL

Jak działa odśmiecanie w Javie (JVM)

źródło: DZone

Proces zbierania śmieci w Javie

Funkcja wyrzucania elementów bezużytecznych w Javie automatycznie przydziela i zwalnia pamięć, dzięki czemu programiści nie muszą pisać osobnego programu do zarządzania pamięcią, co jest jedną z głównych zalet programowania w Javie. Za każdym razem, gdy program Java jest uruchamiany na maszynie JVM, na stercie tworzone są obiekty reprezentujące część pamięci przydzieloną programowi. Z biegiem czasu niektóre przedmioty nie będą już potrzebne. Moduł zbierający elementy bezużyteczne znajduje te nieużywane obiekty i usuwa je, aby zwolnić pamięć. Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w wywiadzie technicznym - 1Moduł zbierający elementy bezużyteczne po ocenie sterty pamięci określi, które obiekty są używane, a które nie, i usunie nieużywane obiekty. Używany obiekt lub obiekt, do którego się odwołujemy, oznacza, że ​​jakaś część programu nadal utrzymuje wskaźnik do tego obiektu. Jeśli obiekt nie jest już używany lub nie ma już do niego odniesienia, żadna część programu nie będzie już odwoływać się do niego. W ten sposób pamięć używaną przez obiekt, do którego nie ma odniesienia, można zwolnić, wykonując wyrzucanie elementów bezużytecznych. Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w wywiadzie technicznym - 2Zwalnianie pamięci można opisać trzema głównymi procesami:
  1. Cechowanie.
  2. Normalne usuwanie.
  3. Usuwanie z zagęszczeniem.
Znakowanie to proces identyfikowania części pamięci, które są i nie są używane przez moduł zbierający elementy bezużyteczne. Etykietowanie jest zwykle pierwszym krokiem. Normalne usuwanie to proces usuwania obiektów, do których nie ma odniesień, pozostawiając obiekty i wskaźniki, do których istnieją odniesienia, w wolnej przestrzeni. Usuwanie poprzez zagęszczenie — oprócz usuwania obiektów, do których nie istnieją odniesienia, kompresuje pozostałe obiekty, do których istnieją odniesienia, przenosząc je razem, dzięki czemu nowa alokacja pamięci jest znacznie łatwiejsza i szybsza.

Pamięć sterty JVM

Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w wywiadzie technicznym - 3

Młoda generacjA

Nowo powstałe obiekty rozpoczynają się w Młodej Pokoleniu. Nazywa się go również żłobkiem, ponieważ zaczynają tu żyć nowe obiekty. Young Generation dzieli się na Przestrzeń Edenu, w której rozpoczynają się wszystkie nowe obiekty, oraz dwie Przestrzenie Ocalałych, w których obiekty są przenoszone z Edenu po przetrwaniu w jednym cyklu zbierania śmieci. Powodują ponowną zbiórkę śmieci, gdy przedmioty zostaną odebrane przez śmieciarza Młodego Pokolenia. Eden Space Wszystkie nowe obiekty powstają najpierw w Eden Space. Drobne zbieranie elementów bezużytecznych zostanie uruchomione, gdy osiągnie próg określony przez maszynę JVM. Wspomniane obiekty zostają przeniesione z Przestrzeni Edenu do pierwszego miejsca zapisu („Eden” i „z” -> „do”). Obiekty, do których nie istnieją odniesienia, są usuwane po wyczyszczeniu Eden Space. Ocalały 0 (S0) i Ocalały 1 (S1) Obydwa pola ocalałego (Od i do) zaczynają się puste. Gdy czyszczenie pamięci nastąpi ponownie, wszystkie obiekty, do których istnieją odniesienia, zostaną przeniesione na pozostałe miejsce. Po zakończeniu zbierania śmieci miejsca (imiona) ocalałego „od” i „do” zostają zamienione miejscami. Jeśli podczas poprzedniego zbierania śmieci S1 był w roli „do”, teraz S1 jest pełny i staje się „od”. Odpowiednio, jeśli S0 jest puste, wówczas zmieni się na „do”.

Stare pokolenie

Po drobnym odśmieceniu, gdy przestarzałe obiekty osiągną określony próg wiekowy (domyślny próg dla nowoczesnych maszyn JVM ustawiony jest na 15 cykli odśmiecania), wraz z obiektami długowiecznymi przechodzą z młodszej generacji do starej. W miarę pojawiania się mniejszych pojemników na śmieci obiekty będą nadal przemieszczać się do przestrzeni Starej Generacji, zacznie się ona zapełniać i nastąpi większe zbieranie śmieci. Podstawowe wyrzucanie elementów bezużytecznych ma miejsce, gdy obiekty są zbierane przez moduł wyrzucający elementy bezużyteczne starej generacji. Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w rozmowie technicznej - 4

Trwałe pokolenie

Metadane, takie jak klasy i metody, są przechowywane w programie Permanent Generation. Klasy, które nie są już używane, mogą zostać z niego usunięte przez moduł zbierający elementy bezużyteczne. Podczas pełnego zbierania śmieci zbierane są nieużywane obiekty ze wszystkich pokoleń.Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w wywiadzie technicznym - 5

Rodzaje zbierania śmieci

Kolekcje śmieci, które czyszczą różne części sterty, są często nazywane drobnymi, głównymi i pełnymi śmieciami. Ponieważ jednak terminy Minor, Major i Full są powszechnie używane bez odpowiedniej definicji, przyjrzymy się wyjaśnieniu wszystkich tych typów zbierania śmieci.

Drobne zbieranie śmieci

Zbiórka śmieci z przestrzeni Młodego Pokolenia nosi nazwę Minor Garbage Collection. Ten typ kompilacji jest zawsze wyzwalany, gdy maszyna JVM nie może przydzielić miejsca dla nowego obiektu, to znaczy, gdy przestrzeń Eden jest pełna. Zatem im wyższy współczynnik selekcji, tym częściej następuje drobne zbieranie śmieci.

Główny zbiór śmieci

Major Garbage Collection czyści dzierżawione (stare miejsce). Ponieważ Stare Pokolenie jest większe, montaże odbywają się rzadziej niż Młode Pokolenie. Kiedy obiekty znikają ze Starej Generacji, mówimy, że nastąpiło „poważne zbieranie śmieci”. Kolekcjoner Starego Pokolenia będzie próbował przewidzieć, kiedy musi zacząć zbierać, aby uniknąć niepowodzeń promocyjnych ze strony Młodego Pokolenia. Kolekcjonerzy monitorują próg zapełnienia Starej Generacji i rozpoczynają zbieranie po przekroczeniu tego progu. Jeżeli próg ten nie jest wystarczający do spełnienia wymogów promocji, uruchamiana jest „Pełna Zbiórka Śmieci”.

Pełna zbiórka śmieci

Funkcja Full Garbage Collection czyści całą masę — zarówno młodych, jak i starszych przestrzeni. Wiele osób jest zdezorientowanych pomiędzy Majorem (tylko OLD pokolenie) a Full GC (Young + OLD (Sterta)). Pełna zbiórka śmieci obejmuje promocję wszystkich obiektów żywych od młodszej do starszej generacji po złożeniu i zagęszczeniu starej generacji. Całkowite wywóz śmieci będzie zatrzymaniem akcji Stop-the-World. Zapewnia to, że nowe obiekty nie zostaną przydzielone i że obiekty nie staną się niedostępne podczas działania modułu zbierającego.

15 ważnych pytań o wiosnę w rozmowie technicznej

Źródło: Dev.to Spring Framework to uniwersalny framework dla platformy Java. Jego podstawowe funkcje mogą być używane przez dowolną aplikację Java, a istnieją rozszerzenia umożliwiające tworzenie aplikacji internetowych opartych na Java EE. Oto lista pytań i odpowiedzi na rozmowie kwalifikacyjnej związanych z kodowaniem Spring. Mamy nadzieję, że pomogą Ci przygotować się do rozmowy kwalifikacyjnej w 2021 roku.Przerwa kawowa #61.  Jak działa odśmiecanie w Javie (JVM).  15 ważnych pytań o wiosnę w wywiadzie technicznym - 6

1. Czym jest wiosna?

Odpowiedź: Spring to framework typu open source do tworzenia aplikacji Java. Podstawowe funkcje Spring Framework można wykorzystać do tworzenia dowolnej aplikacji w języku Java. Dostępne są także rozszerzenia umożliwiające tworzenie aplikacji internetowych opartych na platformie Java EE. Framework Spring ma na celu ułatwienie użycia J2EE w programowaniu i ulepszenie praktyk programistycznych poprzez włączenie modelu opartego na POJO (Plain Old Java Object).

2. Jaki jest domyślny zakres komponentu bean w środowisku Spring?

Odp.: Domyślnym zakresem komponentu bean jest Singleton (wzorzec projektowy).

3. Co to jest okablowanie Beana?

Odpowiedź: Okablowanie fasoli to czynność polegająca na tworzeniu powiązań między komponentami aplikacji (fasolami) w kontenerze Spring.

4. Co to jest bezpieczeństwo wiosenne?

Odpowiedź: Spring Security to oddzielny moduł środowiska Spring, który koncentruje się na udostępnianiu metod uwierzytelniania i autoryzacji aplikacjom Java. Naprawia także najczęstsze luki w zabezpieczeniach, takie jak ataki CSRF. Aby używać Spring Security w aplikacjach internetowych, możesz zacząć od prostej adnotacji: @EnableWebSecurity.

5. Co zawiera definicja fasoli?

Odpowiedź: Definicja komponentu bean zawiera informacje zwane metadanymi konfiguracyjnymi, które kontener musi znać:
  • Jak stworzyć fasolę;
  • Szczegóły cyklu życia fasoli;
  • zależności fasoli.

6. Co to jest Spring Boot?

Odpowiedź: Spring Boot to projekt udostępniający wstępnie skonfigurowany zestaw frameworków redukujących standardową konfigurację, dzięki czemu można uruchomić aplikację Spring przy minimalnej liczbie kodu.

7. Co to jest DispatcherServlet i do czego służy?

Odp.: DispatcherServlet to implementacja wzorca projektowego Front Controller, który obsługuje wszystkie przychodzące żądania internetowe kierowane do aplikacji Spring MVC. Wzorzec Front Controller (Enterprise Application Design Pattern) jest powszechnym wzorcem w aplikacjach internetowych, którego zadaniem jest przyjęcie całego żądania i skierowanie go do różnych komponentów aplikacji w celu faktycznego przetworzenia. W Spring MVC DispatcherServlet służy do znalezienia odpowiedniego kontrolera do obsługi żądania. Odbywa się to za pomocą mapowania procedur obsługi: na przykład adnotacji @RequestMapping.

8. Czy plik spring-mvc.jar jest potrzebny w ścieżce klas, czy też jest częścią Spring-Core?

Odpowiedź: Spring-mvc.jar jest częścią spring-core, co oznacza, że ​​jeśli chcesz używać frameworka Spring MVC w swoim projekcie Java, musisz dołączyć spring-mvc.jar do ścieżki klas swojej aplikacji. W aplikacji internetowej Java plik spring-mvc.jar jest zwykle umieszczany w folderze /WEB-INF/lib.

9. Jakie są korzyści z używania Springa?

Odpowiedź: Poniżej znajduje się lista niektórych korzyści płynących z używania Spring Framework:
  • Lekkość – sprężyna jest stosunkowo lekka, jeśli chodzi o rozmiar i przezroczystość. Podstawowa wersja Spring Framework zajmuje około 2 MB.
  • Odwrócenie sterowania (IOC) - Luźne połączenie uzyskuje się wiosną za pomocą techniki odwrócenia sterowania. Obiekty udostępniają swoje zależności zamiast tworzyć lub wyszukiwać obiekty zależne.
  • Zorientowany na aspekty — Spring wspiera programowanie zorientowane aspektowo i zapewnia spójny rozwój poprzez oddzielenie logiki biznesowej aplikacji od usług systemowych.
  • Kontenery — Spring Container tworzy obiekty, łączy je ze sobą, konfiguruje i zarządza nimi od utworzenia do usunięcia.
  • Framework MVC — framework sieciowy Spring to dobrze zaprojektowany framework sieciowy MVC, który stanowi alternatywę dla frameworków internetowych, takich jak Struts lub innych nadmiernie zaprojektowanych lub mniej popularnych frameworków internetowych.
  • Zarządzanie transakcjami - Spring posiada spójny interfejs zarządzania transakcjami, który można skalować do transakcji lokalnych (np. przy użyciu pojedynczej bazy danych) lub transakcji globalnych (np. przy użyciu JTA).
  • Obsługa wyjątków — Spring zapewnia wygodny interfejs API do konwertowania wyjątków specyficznych dla technologii (takich jak te zgłaszane przez JDBC, Hibernate lub JDO) na spójne, niesprawdzone wyjątki.

10. Czym jest fasola jara?

Odp.: Wiosenne fasole to instancje obiektów zarządzanych przez Spring Container. Są one tworzone i łączone przez szkielet i umieszczane w „torbie na przedmioty” (pojemniku), skąd można je później odzyskać. Okablowanie jest tym, co stanowi zastrzyk zależności. Oznacza to, że możesz po prostu powiedzieć: „Potrzebuję tej rzeczy”, a framework będzie przestrzegać pewnych zasad, aby uzyskać ten obiekt.

11. Jaki jest cel modułu Core Container?

Odp.: Kontener jądra zapewnia podstawową funkcjonalność frameworka Spring. Podstawowym komponentem głównego kontenera jest BeanFactory, implementacja wzorca Factory. BeanFactory wykorzystuje kontrolę inwersji do oddzielenia zależności konfiguracji i specyfikacji aplikacji od rzeczywistego kodu aplikacji.

12. Co to jest kontekst aplikacji?

Odpowiedź: Na pierwszy rzut oka kontekst aplikacji jest taki sam, jak w fabryce fasoli. Obydwa ładują definicje komponentów bean, łączą je w pakiety i dystrybuują na żądanie. Ale zapewnia również:
  • Narzędzie do rozwiązywania wiadomości tekstowych, w tym obsługa internacjonalizacji.
  • Powszechny sposób ładowania zasobów plikowych.
  • Zdarzenia dla komponentów bean zarejestrowanych jako detektory.

13. Jak zintegrować Java Server Face (JSF) ze Springiem?

Odpowiedź: JSF i Spring mają te same funkcje, szczególnie w obszarze usług Inversion of Control. Deklarując komponenty bean zarządzane przez JSF w pliku konfiguracyjnym twarze-config.xml, umożliwiasz FacesServletowi utworzenie instancji tego komponentu bean podczas uruchamiania. Twoje strony JSF mają dostęp do tych komponentów bean i wszystkich ich właściwości. JSF i Spring można zintegrować na dwa sposoby: DelegatingVariableResolver : Spring jest wyposażony w funkcję rozpoznawania zmiennych JSF, która umożliwia jednoczesne używanie JSF i Spring. DelegatingVariableResolver najpierw deleguje wyszukiwanie wartości do domyślnego interpretera bazowej implementacji JSF, a następnie do „kontekstu biznesowego” Spring WebApplicationContext. Ułatwia to wstrzykiwanie zależności do komponentów bean zarządzanych przez JSF. FacesContextUtils : Niestandardowy VariableResolver działa dobrze podczas mapowania jego właściwości na komponenty bean w pliku Faces-config.xml. Jeśli jednak chcesz przechwycić komponent bean, klasa FacesContextUtils ułatwia to. Jest podobny do WebApplicationContextUtils, z tą różnicą, że akceptuje parametr FacesContext zamiast parametru ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Czym jest framework Spring MVC?

Odp.: Framework Spring Web MVC udostępnia architekturę modelu, widoku i kontrolera oraz gotowe komponenty, których można używać do tworzenia elastycznych i luźno powiązanych aplikacji internetowych. Wzorzec MVC powoduje oddzielenie różnych aspektów aplikacji (logiki wejściowej, logiki biznesowej i logiki interfejsu użytkownika), umożliwiając jednocześnie luźne powiązanie między tymi elementami.

15. Jak działa obsługa zdarzeń wiosną?

Odpowiedź: Przetwarzanie w ApplicationContext odbywa się poprzez klasę ApplicationEvent i interfejs ApplicationListener . Oznacza to, że jeśli komponent bean implementuje ApplicationListener , to za każdym razem, gdy obiekt ApplicationEvent jest publikowany w ApplicationContext , ten komponent bean jest rejestrowany. Dziękuję za przeczytanie i życzę powodzenia w rozmowie technicznej!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION