Frage

Ich bin startet eine Java-JAR-Datei, die oft mehr als die Standard-64MB max Heap-Größe erfordert. Eine 256 MB Speichergröße ist aber für diese Anwendung ausreichend. Gibt es trotzdem zu geben (im Manifest vielleicht?), Immer eine 256MB max Heap-Größe zu verwenden, wenn das Glas starten? (Nähere Einzelheiten unten, falls erforderlich.)


Dies ist ein Kommandozeilen-Anwendung, die ich in Java geschrieben habe, die einige Bildmanipulation der Fall ist. Auf hochauflösenden Bildern (ca. 12 Megapixel und darüber, was nicht ungewöhnlich ist) ich eine OutOfMemoryError bekommen.

Zur Zeit die App aus einer JAR-Datei Ich bin starten, d.

java -jar MyApp.jar params...

Ich kann ein OutOfMemoryError vermeiden durch 256MB max Heap-Größe auf der Befehlszeile angeben, das heißt:.

java -Xmx256m -jar MyApp.jar params...

Aber ich will das nicht angeben haben, da ich weiß, dass 256 MB auch für hochauflösende Bilder ausreichend sind. Ich möchte, dass die Informationen in der JAR-Datei gespeichert haben. Ist das möglich?

War es hilfreich?

Lösung

Sie können auch einen Wrapper wie launch4j verwenden, die eine ausführbare Datei für die meisten OS machen: es und ermöglicht es Ihnen, VM-Optionen angeben.

Andere Tipps

eine Batch oder Shell-Skript schreibt die folgende Zeile enthält. Legen Sie in den Ordner, in dem MyApp.jar gespeichert wird.

java -Xmx256M -jar MyApp.jar

Danach immer öffnet dieses Batch / Script-Datei, um die JAR-Datei zu starten. Obwohl dies nicht Spezifikation der virtuellen Speichergröße in jar-Datei selbst einzubetten. Aber es kann das Problem außer Kraft setzt den gleichen Befehl oft auf der Kommandozeile zu schreiben.

Ich hatte ein ähnliches Bedürfnis, und dachte, ich soll diese in der Lage sein, im Manifest zu spezifizieren, wie oben vorgeschlagen. Dies ist jedoch nicht möglich. Meine Lösung ist ähnlich dem, was Alex oben vorgeschlagen, aber was ich tat, war die wichtigste Methode Java verwenden Process haben eine andere Java-Prozess zu starten. Wenn ein anderer Prozess starten können Sie den maximalen Speicher für den neuen Prozess angeben. Sie haben im Wesentlichen ein Java-Prozess ein anderes starten. Es ist ein wenig kitschig, aber es funktioniert und es immer noch erlaubt Sie Ihre Anwendung durch einen Doppelklick auf die JAR-Datei zu starten, die ich weiß, was Sie tun wollen. Schauen Sie in die Process.

Das ist nicht so toll, aber man könnte es als eine ausführbare JAR, und dann in dem Haupt ist, hat sie sich über die Kommandozeile als Nicht-Daemon-Thread mit der richtigen params in einer Eigenschaft gespeicherten Datei ausführen oder berechnet oder was auch immer, dann das Original verlassen. Man könnte es auch das Glas mit einem anderen „echten“ Einstiegspunkt hat ausführen, die diese Parameter erwartet.

eine Antwort auf google.

Er sagt nicht für die JAR-Datei, ja in JavaWeb Start, und dass Sie es in Ihrem (möglicherweise systemspezifische) launcher / Wrapper-Skript / app tun sollten.

!

YES Sie benötigen ein kleines Starter-Programm zu schreiben - ich schrieb kompatibel ein kleinen meist Cross-Plattform-Programm (Pfade in Ordnung sein sollen), es zu tun - siehe unten. Dies hat unter Windows / Ubuntu / Mac OS X getestet.

Silent-Entwicklung Blog Artikel auf die Erhöhung der ausführbaren Java jar Haufen

Anscheinend funktioniert das auf Ubuntu

> export _JAVA_OPTIONS="-Xmx1g"
  

java -jar jconsole.jar &   Abgeholt _JAVA_OPTIONS: -Xmx1g

Es gibt viele Möglichkeiten, es zu tun:

Sie können durch eine andere Jar-Datei, die Ihre Haupt Jar auslöst.

Oder haben Sie eine Batchdatei, die Ihr Glas beginnen. Aber Vorsicht, heruntergeladen, wenn von net sagt, wird der Benutzer über Berechtigungen festlegen für das Skript runnable sein

Erstellen Sie ein Installationsprogramm. Auf dem Mac mit Bündler die Oracle Java App für Java 7, Apple App Bündler für Java 6 build die .app-Datei. Sie kann immer noch nicht weiterverteilen, da die erforderlichen Berechtigungen werden nicht eingestellt werden. Erstellen Sie eine dmg für die App-Datei. Dies kann für die Verteilung verwendet werden. Ein ähnliches Installationsprogramm für Windows

Die dritte Technik wäre die beste sein, da man dann auch die Abhängigkeiten verpacken können, setzen alle JVM-Argumente etc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top