Ich habe eine Java-App, die mit JarBundler verpackt ist. Die App ist ziemlich CPU-intensiv (viele große Collection.sort () Anrufe).
Unter Mac OS läuft die App langsam und träge, wenn Sie den 64-Bit-JavaApplicationStub verwenden. Diese JavaApplicationStub-Datei startet die Java 64-Bit-VM.
Ich habe eine alte JavaApplicationStub-Datei gefunden, die nur 32-bit ist. Ich ersetzte es im Bundle, und die App läuft 10x schneller! (Folglich wird die 32-Bit-VM verwendet, wenn die Anwendung ausgeführt wird).
Macht das irgendeinen Sinn? Warum ist die 64-Bit-VM so viel langsamer? Ist es sinnvoll, eine App zu erstellen und die JavaApplicationStub-Datei so zu hacken?
Beratung ist willkommen.
Siehe diesen Beitrag zu den Vorteilen / Nachteilen einer 64-Bit-JVM. Zusammenfassend, Zeiger-Dereferenzierung & amp; Die Speicher-De-Allocation kann länger dauern - und Sie bewegen sich in größeren Datenstrukturen (d. h. 64, nicht 32 Bit, was Ihnen keinen Vorteil bringt, es sei denn, Sie verwenden sie explizit).
Siehe auch diesen relevanten Artikel , in dem sie Leistungseinbußen von bis zu 85% beim Wechsel zu 64bit, was mit dem übereinstimmt, was Sie gerade erleben:
Der Grund für diesen Leistungsabfall ist eigentlich sehr viel mit dem Speicherzuwachs verbunden. Die Speicherreferenzen unter Java wurden doppelt so groß, wodurch die Größe von Speicherstrukturen in der WAS-Laufzeitumgebung und den Objekten Ihrer Anwendung erhöht wurde. Leider sind die Cache-Größen des Prozessorspeichers nicht gleichzeitig größer geworden. Dies bedeutet mehr Speicher-Cache-Fehler, was bedeutet, dass die Hardware, die mit dem größeren Speicher arbeitet, arbeitsintensiver ist, was eine schlechtere Anwendungsleistung bedeutet.
Tags und Links java 64bit macos jvm jarbundler