JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 60. So funktioniert die Garbage Collectio...

Kaffeepause Nr. 60. So funktioniert die Garbage Collection in Java (JVM). 15 wichtige Fragen zum Frühling in einem technischen Interview

Veröffentlicht in der Gruppe Random-DE

So funktioniert die Garbage Collection in Java (JVM)

Quelle: DZone

Garbage-Collection-Prozess in Java

Die Java- Garbage Collection weist automatisch Speicher zu und gibt ihn frei, sodass Entwickler kein separates Programm zur Speicherverwaltung schreiben müssen, was einer der Hauptvorteile der Programmierung in Java ist. Jedes Mal, wenn ein Java-Programm auf der JVM ausgeführt wird, werden Objekte auf dem Heap erstellt und stellen einen Teil des dem Programm zugewiesenen Speichers dar. Mit der Zeit werden einige Artikel nicht mehr benötigt. Der Garbage Collector findet diese nicht verwendeten Objekte und entfernt sie, um Speicher freizugeben. Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 1Der Garbage Collector ermittelt nach der Auswertung des Speicherheaps, welche Objekte verwendet werden und welche nicht, und entfernt nicht verwendete Objekte. Ein verwendetes oder referenziertes Objekt bedeutet, dass ein Teil Ihres Programms immer noch einen Zeiger auf dieses Objekt verwaltet. Wenn ein Objekt nicht mehr verwendet wird oder nicht mehr referenziert wird, wird es von keinem Teil des Programms mehr referenziert. Somit kann Speicher, der von einem nicht referenzierten Objekt verwendet wird, durch die Durchführung einer Garbage Collection freigegeben werden. Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 2Das Freigeben von Speicher kann durch drei Hauptprozesse beschrieben werden:
  1. Markierung.
  2. Normale Entfernung.
  3. Entfernung mit Verdichtung.
Beim Markieren werden Teile des Speichers identifiziert, die vom Garbage Collector verwendet werden bzw. nicht. Die Kennzeichnung ist meist der erste Schritt. Beim normalen Löschen werden nicht referenzierte Objekte gelöscht, wobei referenzierte Objekte und Zeiger im freien Speicherplatz verbleiben. Komprimierungslöschung – Zusätzlich zum Löschen nicht referenzierter Objekte werden die verbleibenden referenzierten Objekte komprimiert und die Objekte zusammen verschoben, um die neue Speicherzuweisung viel einfacher und schneller zu machen.

JVM-Heap-Speicher

Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 3

Junge Generation

Neu erstellte Objekte beginnen in der jungen Generation. Man nennt es auch Kinderstube, weil hier neue Objekte zu leben beginnen. Young Generation ist in den Eden Space unterteilt, in dem alle neuen Objekte beginnen, und in zwei Survivor Spaces, in denen Objekte aus Eden entfernt werden, nachdem sie in einem einzigen Garbage Collection-Zyklus überlebt haben. Sie verursachen eine erneute Müllsammlung, wenn Objekte vom Müllsammler der jungen Generation gesammelt werden. Eden Space Alle neuen Objekte werden zunächst im Eden Space erstellt. Die Minor-Garbage-Collection wird ausgelöst, wenn sie einen von der JVM festgelegten Schwellenwert erreicht. Die genannten Objekte werden vom Eden Space in den ersten Save Space verschoben („Eden“ und „von“ -> „nach“). Nicht referenzierte Objekte werden entfernt, wenn Eden Space gelöscht wird. Überlebender 0 (S0) und Überlebender 1 (S1) Beide Felder für Überlebende (Von und Bis) beginnen leer. Wenn die Speicherbereinigung erneut erfolgt, werden alle referenzierten Objekte in den verbleibenden Speicherplatz verschoben. Wenn die Speicherbereinigung abgeschlossen ist, werden die Orte (Namen) der Überlebenden „von“ und „bis“ vertauscht. Wenn bei der vorherigen Garbage Collection S1 die Rolle „bis“ hatte, ist S1 jetzt voll und wird „von“. Wenn S0 leer ist, wird es dementsprechend zu „to“.

Alte Generation

Wenn veraltete Objekte nach einer geringfügigen Speicherbereinigung einen bestimmten Altersschwellenwert erreichen (der Standardschwellenwert für moderne JVMs ist auf 15 Speicherbereinigungszyklen festgelegt), wechseln sie zusammen mit langlebigen Objekten von der jungen Generation zur alten. Wenn weiterhin kleinere Garbage Collectors entstehen, bewegen sich weiterhin Objekte in den Raum der alten Generation, er beginnt sich zu füllen und es wird zu einer großen Garbage Collection kommen. Die grundlegende Garbage Collection erfolgt, wenn Objekte vom Garbage Collector der alten Generation gesammelt werden. Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 4

Permanente Generation

Metadaten wie Klassen und Methoden werden in Permanent Generation gespeichert. Nicht mehr verwendete Klassen können vom Garbage Collector daraus entfernt werden. Bei einer vollständigen Garbage Collection werden ungenutzte Objekte aller Generationen gesammelt.Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 5

Arten der Garbage Collection

Garbage Collections, die verschiedene Teile innerhalb des Heaps bereinigen, werden häufig als Minor-, Major- und Full-Garbage Collections bezeichnet. Da die Begriffe „Minor“, „Major“ und „Full“ jedoch häufig ohne entsprechende Definition verwendet werden, werden wir uns mit der Erklärung all dieser Arten der Speicherbereinigung befassen.

Kleinere Müllabfuhr

Die Sammlung von Müll aus dem Raum der jungen Generation wird als Minor Garbage Collection bezeichnet. Diese Art von Build wird immer dann ausgelöst, wenn die JVM keinen Speicherplatz für ein neues Objekt zuweisen kann, d. h. wenn Eden Space voll ist. Je höher also die Auswahlrate, desto häufiger kommt es zur Minor Garbage Collection.

Große Müllabfuhr

Die große Garbage Collection räumt Tenured (alten Raum) auf. Da die alte Generation größer ist, kommt es seltener zu Versammlungen als bei der jungen Generation. Wenn Objekte aus der alten Generation verschwinden, spricht man von einer „großen Müllsammlung“. Der Sammler der alten Generation wird versuchen vorherzusagen, wann er mit dem Sammeln beginnen muss, um Misserfolge bei der Werbung der jungen Generation zu vermeiden. Sammler überwachen den Füllschwellenwert der alten Generation und beginnen mit der Sammlung, wenn dieser Schwellenwert überschritten wird. Reicht dieser Schwellenwert nicht aus, um die Fördervoraussetzungen zu erfüllen, wird die „Full Garbage Collection“ gestartet.

Vollständige Müllabfuhr

Die vollständige Garbage Collection entsorgt den gesamten Müll – sowohl junge als auch alte Räume. Viele Menschen sind verwirrt zwischen Major (nur OLD-Generation) und Full GC (Young + OLD (Heap)). Die vollständige Müllabfuhr umfasst die Förderung aller lebenden Objekte von der jungen bis zur alten Generation, nachdem die alte Generation zusammengebaut und verdichtet wurde. Eine komplette Müllabfuhr wird Stopp für Stop-the-World sein. Dadurch wird sichergestellt, dass keine neuen Objekte zugewiesen werden und dass Objekte nicht nicht mehr verfügbar sind, während der Collector ausgeführt wird.

15 wichtige Fragen zum Frühling in einem technischen Interview

Quelle: Dev.to Spring Framework ist ein universelles Framework für die Java-Plattform. Seine Kernfunktionen können von jeder Java-Anwendung genutzt werden, und es gibt Erweiterungen zum Erstellen von Java EE-basierten Webanwendungen. Hier ist eine Liste mit Interviewfragen und Antworten im Zusammenhang mit der Spring-Codierung. Wir hoffen, dass sie Ihnen bei der Vorbereitung auf Ihr technisches Vorstellungsgespräch im Jahr 2021 helfen.Kaffeepause Nr. 61.  So funktioniert die Garbage Collection in Java (JVM).  15 wichtige Fragen zum Frühling in einem technischen Interview - 6

1. Was ist Frühling?

Antwort: Spring ist ein Open-Source-Framework für die Entwicklung von Java-Anwendungen. Mit den Kernfunktionen des Spring Framework können beliebige Java-Anwendungen entwickelt werden. Darüber hinaus stehen Erweiterungen zur Erstellung von Webanwendungen auf Basis der Java EE-Plattform zur Verfügung. Das Spring-Framework zielt darauf ab, die Verwendung von J2EE in der Entwicklung zu vereinfachen und die Programmierpraktiken durch die Integration eines auf POJO (Plain Old Java Object) basierenden Modells zu verbessern.

2. Was ist der Standardumfang einer Bean im Spring-Framework?

Antwort: Der Standardbereich einer Bean ist Singleton (Entwurfsmuster).

3. Was ist Bean-Verkabelung?

Antwort: Bei der Bean-Verkabelung werden Verbindungen zwischen Anwendungskomponenten (Beans) in einem Spring-Container erstellt.

4. Was ist Spring Security?

Antwort: Spring Security ist ein separates Modul des Spring-Frameworks, das sich auf die Bereitstellung von Authentifizierungs- und Autorisierungsmethoden für Java-Anwendungen konzentriert. Außerdem werden die häufigsten Sicherheitslücken wie CSRF-Angriffe behoben. Um Spring Security in Webanwendungen zu verwenden, können Sie mit einer einfachen Anmerkung beginnen: @EnableWebSecurity.

5. Was ist in einer Bean-Definition enthalten?

Antwort: Eine Bean-Definition enthält Informationen, die als Konfigurationsmetadaten bezeichnet werden und die der Container über Folgendes wissen muss:
  • So erstellen Sie eine Bohne;
  • Details zum Bean-Lebenszyklus;
  • Bean-Abhängigkeiten.

6. Was ist Spring Boot?

Antwort: Spring Boot ist ein Projekt, das einen vorkonfigurierten Satz von Frameworks bereitstellt, um die Standardkonfiguration zu reduzieren, sodass Sie eine Spring-Anwendung mit minimalem Code zum Laufen bringen können.

7. Was ist DispatcherServlet und wofür wird es verwendet?

Antwort: DispatcherServlet ist eine Implementierung des Front Controller-Entwurfsmusters, das alle eingehenden Webanforderungen an eine Spring MVC-Anwendung verarbeitet. Das Front-Controller-Muster (Enterprise Application Design Pattern) ist ein gängiges Muster in Webanwendungen, dessen Aufgabe darin besteht, die gesamte Anfrage aufzunehmen und zur tatsächlichen Verarbeitung an verschiedene Komponenten der Anwendung weiterzuleiten. In Spring wird MVC DispatcherServlet verwendet, um den richtigen Controller für die Bearbeitung der Anfrage zu finden. Dies erfolgt mithilfe der Handler-Zuordnung: zum Beispiel der Annotation @RequestMapping.

8. Wird spring-mvc.jar im Klassenpfad benötigt oder ist es Teil von Spring-Core?

Antwort: Spring-mvc.jar ist Teil von Spring-Core. Das heißt, wenn Sie das Spring MVC-Framework in Ihrem Java-Projekt verwenden möchten, müssen Sie spring-mvc.jar in den Klassenpfad Ihrer Anwendung aufnehmen. In einer Java-Webanwendung wird spring-mvc.jar normalerweise im Ordner /WEB-INF/lib abgelegt.

9. Welche Vorteile bietet die Verwendung von Spring?

Antwort: Nachfolgend finden Sie eine Liste einiger Vorteile der Verwendung von Spring Framework:
  • Leicht – Spring ist in Bezug auf Größe und Transparenz relativ leicht. Die Basisversion von Spring Framework ist etwa 2 MB groß.
  • Inversion of Control (IOC) – Eine lose Kopplung wird im Frühjahr mithilfe der Inversion of Control-Technik erreicht. Objekte stellen ihre Abhängigkeiten bereit, anstatt abhängige Objekte zu erstellen oder danach zu suchen.
  • Aspektorientiert – Spring unterstützt aspektorientierte Programmierung und gewährleistet eine konsistente Entwicklung durch die Entkopplung der Anwendungsgeschäftslogik von Systemdiensten.
  • Container – Spring Container erstellt Objekte, bindet sie zusammen, konfiguriert sie und verwaltet sie von der Erstellung bis zur Entsorgung.
  • MVC Framework – Das Spring-Webframework ist ein gut gestaltetes MVC-Webframework, das eine Alternative zu Webframeworks wie Struts oder anderen übermäßig gestalteten oder weniger beliebten Webframeworks bietet.
  • Transaktionsverwaltung – Spring verfügt über eine konsistente Transaktionsverwaltungsschnittstelle, die auf lokale Transaktionen (z. B. mithilfe einer einzelnen Datenbank) oder globale Transaktionen (z. B. mithilfe von JTA) skaliert werden kann.
  • Ausnahmebehandlung – Spring bietet eine praktische API zum Konvertieren technologiespezifischer Ausnahmen (z. B. von JDBC, Hibernate oder JDO ausgelöste) in konsistente, ungeprüfte Ausnahmen.

10. Was sind Frühlingsbohnen?

Antwort: Spring Beans sind Instanzen von Objekten, die von Spring Container verwaltet werden. Sie werden durch das Framework erstellt und verbunden und in einer „Objekttasche“ (Container) abgelegt, aus der Sie sie später abrufen können. Die Verkabelung ist das, was die Abhängigkeitsinjektion ausmacht. Das bedeutet, dass Sie einfach sagen können: „Ich brauche dieses Ding“, und das Framework befolgt bestimmte Regeln, um dieses Objekt zu erhalten.

11. Was ist der Zweck des Core-Container-Moduls?

Antwort: Der Kernel-Container stellt die Kernfunktionalität des Spring-Frameworks bereit. Die Hauptkomponente des Hauptcontainers ist die BeanFactory, eine Implementierung des Factory-Musters. BeanFactory nutzt die Inversionskontrolle, um die Konfigurations- und Anwendungsspezifikationsabhängigkeiten vom eigentlichen Anwendungscode zu trennen.

12. Was ist ein Anwendungskontext?

Antwort: Auf den ersten Blick ist der Anwendungskontext derselbe wie die Bean Factory. Beide laden Bean-Definitionen, bündeln die Beans und verteilen sie auf Anfrage. Aber es bietet auch:
  • Ein Tool zum Auflösen von Textnachrichten, einschließlich Unterstützung für die Internationalisierung.
  • Eine gängige Methode zum Laden von Dateiressourcen.
  • Ereignisse für Beans, die als Listener registriert sind.

13. Wie integriere ich Java Server Faces (JSF) in Spring?

Antwort: JSF und Spring haben einige der gleichen Funktionen, insbesondere im Bereich der Inversion of Control-Dienste. Indem Sie JSF-verwaltete Beans in der Konfigurationsdatei faces-config.xml deklarieren, ermöglichen Sie FacesServlet, diese Bean beim Start zu instanziieren. Ihre JSF-Seiten haben Zugriff auf diese Beans und alle ihre Eigenschaften. JSF und Spring können auf zwei Arten integriert werden: DelegatingVariableResolver : Spring wird mit einem JSF-Variablen-Resolver geliefert, der es Ihnen ermöglicht, JSF und Spring zusammen zu verwenden. DelegatingVariableResolver delegiert die Suche nach Werten zunächst an den Standardinterpreter der zugrunde liegenden JSF-Implementierung und dann an den „Geschäftskontext“ des Spring WebApplicationContext. Dies erleichtert das Einfügen von Abhängigkeiten in JSF-verwaltete Beans. FacesContextUtils : Ein benutzerdefinierter VariableResolver funktioniert gut, wenn seine Eigenschaften Beans in faces-config.xml zugeordnet werden. Wenn Sie jedoch eine Bean erfassen müssen, ist dies mit der FacesContextUtils-Klasse ganz einfach. Es ähnelt WebApplicationContextUtils, außer dass es einen FacesContext-Parameter anstelle eines ServletContext-Parameters akzeptiert.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Was ist das Spring MVC-Framework?

Antwort: Das Spring Web MVC- Framework bietet eine Model-View-Controller-Architektur und vorgefertigte Komponenten, die zur Entwicklung flexibler und lose gekoppelter Webanwendungen verwendet werden können. Das MVC-Muster führt zur Trennung verschiedener Aspekte einer Anwendung (Eingabelogik, Geschäftslogik und UI-Logik) und ermöglicht gleichzeitig eine lose Kopplung zwischen diesen Elementen.

15. Wie funktioniert die Eventabwicklung im Frühling?

Antwort: Die Verarbeitung im ApplicationContext erfolgt über die ApplicationEvent- Klasse und die ApplicationListener- Schnittstelle. Das heißt, wenn eine Bean ApplicationListener implementiert , wird diese Bean jedes Mal registriert, wenn ein ApplicationEvent im ApplicationContext veröffentlicht wird . Vielen Dank fürs Lesen und viel Glück bei Ihrem technischen Interview!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION