[JAVA] Ich habe versucht, die Kapazität von Spring Boot zu reduzieren

Vorstellen


Was ist Spring Boot?

--Mechanismus / Framework, das das Erstellen von Spring-basierten Anwendungen erleichtert --Erstellungsergebnisse werden in einer einzigen JAR-Datei zusammengefasst


Vorteile eines einzelnen Glases

spring-boot.JPG


Nachteile eines einzelnen Glases

spring-boot.JPG


Ich habe versucht, die Glasgröße zu reduzieren


Ergebnis

img1.JPG


Ergebnis

img2.JPG


Größenvergleich

graph_2.JPG


Wie hast du es gemacht?


Wie macht man Hello World in Java?


1. 1. Code schreiben

Hello.java


public class Hello {
    public static void main(String... args) {
        System.out.println("Hello World");
    }
}

2. Kompilieren Sie mit Javac

$ javac Hello.java

3. 3. Hello.class wird generiert

after-javac.jpg


4. Laufen Sie auf Java

$ java Hello
Hello World

Hast du verstanden?


Die Kapazität des Quellcodes vor dem Kompilieren ist geringer!

Die API für Javac ist Standard!

java-compiler.jpg

https://docs.oracle.com/javase/jp/8/docs/api/javax/tools/JavaCompiler.html


yaruo.jpg


Wie das verbesserte Glas funktioniert

|-LightweightJarExecutor.class  :
|→ Code, der die Quelle aus dem eigenen Jar extrahiert, kompiliert und ausführt
|-...
`-src/        :Spring Boot und eine Reihe von Quellen für abhängige Bibliotheken
  |-ch/       : logback
  |-com/      :Jackson oder Com.wie die Sonne
  |-javax/    :Javaee Standard API
  |-META-INF/
  |-org/      : Spring, hibernate, JBoss, Tomcat, etc... 
  `-sample/   :Frühling MVC Hallo Welt

Verhalten beim Start

  1. Extrahieren Sie den Quellcode aus Ihrem eigenen JAR und kopieren Sie ihn in ein temporäres Verzeichnis
  2. Kompilieren Sie die Quellausgabe mit JavaCompiler in das temporäre Verzeichnis
  3. Laden Sie die Spring Boot-Hauptklasse (JarLauncher) mit URLClassLoader vom Ausgabeziel des Kompilierungsergebnisses.
  4. Führen Sie die main () Methode von JarLauncher aus

Just In Time Kompilieren! (anders) </ span>


Wenn es so belassen wird, wie es ist, ist es verschwenderisch und kann nicht im Gewicht reduziert werden.

lightweight-jar.jpg


Nutzlos 1: Kommentar

lightweight-jar.jpg


Abfall 2: Anmerkung

lightweight-jar.jpg


Abfall 3: privat

lightweight-jar.jpg


Abfall 4: Leer + Zeilenumbruch

lightweight-jar.jpg


Verschwenderisch ausgefeilter und schlanker Code

lightweight-jar.jpg


Ergebnis Die Kapazität konnte um 5 MB reduziert werden! : grin :: thumbsup:

graph_2.JPG


Entschädigung 1: Langsamer Start: unschuldig :: Daumen runter:

lightweight-jar.jpg


Kompensation 2: Debugging nicht möglich: joy :: thumbsdown:

lightweight-jar.jpg


Bitte ahme kein gutes Kind nach

Recommended Posts

Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
[Spring Boot] Ich habe untersucht, wie die Nachbearbeitung der empfangenen Anforderung implementiert werden kann.
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich habe versucht, die Methode zu erklären
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Über die Funktion von Spring Boot aufgrund unterschiedlicher Versionen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe es mit Spring versucht.
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe versucht, den Betrieb des gRPC-Servers mit grpcurl zu überprüfen
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, das Problem des Google Tech Dev Guide zu lösen
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
C # (Grund der Kapselung)
Ich möchte den Inhalt der Absicht var_dump
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
Ich wollte Spring Boot in einem Multiprojekt gradle
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
[Ich habe es versucht] Spring Tutorial
Ich habe Spring Batch ausprobiert
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Ich habe versucht, die Infrastrukturtechnologie der Ingenieure heutzutage mit dem Kochen zu vergleichen.
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Geben Sie die statische Ressourcencodierung in Spring Boot an
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden