Ich habe eine Java-Serveranwendung, die viele Bibliotheken verwendet (Netty, Guava usw.). Ich exportiere diese Anwendung immer als eine einzige .jar-Datei. Als ich die Anwendung in Eclipse ausführte, hatte ich keine Probleme. Aber wenn ich die App in der Konsole starte (Windows oder Ubuntu spielt keine Rolle), habe ich ein seltsames Problem: ALLE Verbindungsvorgänge über Sockets dauern zu lange. Beispielsweise dauert eine einfache http-Verbindung über HttpAsync oder andere (RabbitMQ-Verbindung usw.) 1–2 Minuten. Aber nachdem die Verbindung hergestellt ist, werden Daten schnell gesendet/empfangen. Ich kann mir nicht vorstellen, was das
Problem ist. Wie bereits erwähnt, verwende ich Eclipse für die Entwicklung.
Wie Sie wissen, können Sie Projekte auf drei verschiedene Arten exportieren (in Eclipse):
- Erforderliche Bibliotheken in JAR extrahieren.
- Erforderliche Bibliotheken in JAR packen.
- Erforderliche Bibliotheken in den Unterordner neben JAR kopieren.
Als ich also 2 Optionen verwendet habe, hatte ich Problem. Als ich zur 3D-Option wechselte (alle .jars im Ordner in der Nähe der Haupt-.jar-Datei), wurde das
Problem gelöst.
Im Allgemeinen gibt es keinen großen Unterschied zwischen Option 2 und 3 (in 2 alle .jars nur in einem Glas). Ich dachte, dass es an der zusätzlichen Zeit lag, die zum Laden neuer Klassen in der Ausführungszeit aus den Gläsern benötigt wurde. Das
Problem tritt jedoch nicht nur beim Start auf, sondern bei allen neuen Verbindungen.
Kann jemand dieses Verhalten erklären?
UPD: Eclipse Luna. Es spielt keine Rolle, welches Betriebssystem ich verwende (Windows oder Ubuntu), es spielt sogar keine Rolle, welches JVM (habe es mit einem anderen Oracle-JDK versucht, habe es sogar mit einem offenen JDK versucht).