-Xmx1024m in JAR einbinden

heinz86

Mitglied
Hallo,

ist es möglich den Parameter -Xmx1024m, welcher es ermöglicht das Programm mit 1024 MB Arbeitsspeicher auszuführen mit in ein JAR-File geben, so dass die Applikation immer soviel Speicher bekommt? Benötige dies leider wegen aufwendigen String-Operationen...

Danke.
 

r.w.

Bekanntes Mitglied
Hallo,

ist es möglich den Parameter -Xmx1024m, welcher es ermöglicht das Programm mit 1024 MB Arbeitsspeicher auszuführen mit in ein JAR-File geben, so dass die Applikation immer soviel Speicher bekommt? Benötige dies leider wegen aufwendigen String-Operationen...

Danke.

1 Gigabyte, nur für String-Operationen?
Respekt! ;-)
 

Tobse

Top Contributor
Ich glaube nicht, dass das so klug ist. Wenn auf dem Arbeitsspeicher keine 1024MB mehr da sind, bekomt java sie auch nicht -> das Programm startet nicht. Aus der Jar heraus evlt. sogar ohne fehlermeldung.
Wenn du das aber weglässt, kann es passieren, dass das OS java (ohne, das java es merkt) den übrigen, noch benötigten platz, auf der Festplatte zuschreibt und das Programm läuft, wenn auch nicht ganz so schnell.
 

heinz86

Mitglied
Schonmal vielen Dank für die zahlreichen Antworten.
Vielleicht gibt es ja auch eine andere Möglichkeit. Ich lade eine Textdatei von 100MB und speichere den Inhalt in einem String. Diesen verschlüssele ich dann mit verschiedenen Verfahren. Und wenn ich den Arbeitsspeicher nicht heraufsetze, klappt dies einfach nicht, denn das Einlesen bricht einfach mit einer IO.Exception ab, dass der Java heap nicht ausreicht... Daher sah ich nur die Möglichkeit den Arbeitsspeicher zu erhöhen...
Vielleicht gibt es ja aber auch noch eine andere Möglichkeit?
 

Runtime

Top Contributor
1. Was machst du mit dem verschlüsselten String? Behältst du den im RAM oder schreibst du den sofort in eine Datei?
2. Wenn du den String in kleine Teile schneidest, ist das Gesamtergebnis dann anders?
 
S

Spacerat

Gast
Was für Operationen machst du denn da? Bist du Speicherpathologe? :lol: Könnt ja sagen, dass man mit 'nem DirectByteBuffer diese Menge Speicher alloziieren kann, selbst wenn der Heap in dieser Hinsicht begrenzt ist, die Strings dann auch dort rein bekommt und letztendlich auch dort seine String-OPs durchführen kann. Aber während man hier da und dort an seinen eigenen Operations-Methoden bastelt, gelangt man schnell zu Einsicht, dass es Klassen gibt, die dass schon können -> StringBuffer und StringBuilder. Darüber hinaus macht man sogar die Erfahrung, dass String-OPs gar nicht so Speicheraufwendig sein müssen, wie Anfangs gedacht. ;)
 

heinz86

Mitglied
Hallo,
ich brauche den verschlüsselten String eigentlich nicht. Denn ich möchte nur ermitteln, wie lange die Verschlüsselung an sich benötigt.
Vielleicht kann man daran noch was optimieren...
 
S

Spacerat

Gast
Du musst also eigentlich nur wissen, wie lang die Textdatei ist. Dazu kannst die Klasse "File" verwenden. Wie lange aber diverse Verschlüsselungen brauchen hängt nicht nur von der Art ab, sondern auch von der Rechenleistung. Der Inhalt des Klartextes ist bei vielen Verschlüsselungsarten (z.B. RSA) aber weniger von Bedeutung. Deswegen würde es in den meisten Fällen auch genügen, ein mit 0 gefülltes Bytearray oder besser oben genannten DirectByteBuffer mit der Dateilänge verschlüsseln zu lassen.
 

heinz86

Mitglied
Hallo,

die Idee klingt sehr spannend. Habe jetzt einfach mal nach File geschaut und mir File.length() ausgegeben. Bei einer 100MB großen Datei habe ich nun den Wert 105941950 erhalten. Nun erstelle ich also ein DirectByteArray von der Größe und schreibe dort nur 0en rein und lasse dieses verschlüsseln?
 
S

Spacerat

Gast
Die Nullen brauchst da nicht mal mehr reinschreiben...
Java:
Buffer b = myBuffer;
b.position(b.capacity() - 1);
b.flip();
Aber Vorsicht: ein DirectBuffer kann Speicherleaks verursachen und hat auch kein Array-Puffer. Daraus folgt, dass du in den Verschlüsselungsroutinen nur mit dem Puffer arbeiten kannst.
 
T

TheRealSpikee

Gast
Frag : warum packst du dir 100MB in den RAM ?
Cipher hat eine Methode die sich update(byte[]) nennt. Jetzt liest du einfach wie gewohnt mit nem Buffer das File ein jagst es gleich durch update(byte[]).
Am Ende noch das doFinal(byte[]) und gut ist.

Java:
public static String hash(File input) throws Exception
{
	MessageDigest md=MessageDigest.getInstance("SHA-256");
	FileInputStream fis=new FileInputStream(input);
	int br=0;
	byte[] buf=new byte[1024];
	while((br=fis.read(buf))!=-1)
	{
		md.update(buf, 0, br);
	}
	fis.close();
	byte[] output=md.digest();
	return ToolKit.byteArrayToHexString(output);
}

Das ist jetzt zwar nur ein SHA-256 Hasher ... aber damit kann ich auch Gigabyteweise hashen ohne den RAM anzuheben ... einfach nur weil ich mit nem Buffer von 1kB arbeite *ja ich weis ... ist nicht grade performant da der Buffer sehr klein ist ... aber es funktioniert*.

Und das jetzt mit Cipher aufzubauen sieht ähnlich aus.

btw : in der Praxis wird auch nicht erst das File komplett in den RAM geladen nur um dann die Geschwindigkeit fürs crypten darüber zu erreichen. Mit geeigneter Buffer-Größe ist es sogar schneller dierekt von der Platte aus zu lesen.
 

Guybrush Threepwood

Top Contributor
Um noch einmal auf Deine anfängliche Frage zurück zu kommen: Es geht, wenn Du einen Wrapper, .bat / .sh-Datei oder Webstart nimmst. Aus einer .jar-Datei (Manifest) geht es nicht.
 

truesoul

Top Contributor
Das könntest du aber machen:

Java:
        // Anhand wieviel Speicher zur Verfügung steht.
        String min = ...;
        String max = ...;

        String userdir = System.getProperty("user.dir");
        // Konsolenstring
        String cmd = "java -Xms"+min+"m -Xmx"+max+"m -jar \""+userdir+"\\deineJar.jar\"";

        try {
            // Konsolenaufruf mit Stringeingabe
            Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
           
        }

        // Hier musst du die aktuelle Anwendung beenden mit z.B  System.exit()
Dies machst du ganz am Anfang der Anwendung.
Und anstatt String würde ich StringBuffer verwenden. Damit ist das laden von einer solch großen Datei erheblich schneller.

Bzw würde ich den Vorschlag von oben bevorzugen, zwei Post über mir.

Mfg
 
Zuletzt bearbeitet:

heinz86

Mitglied
Frag : warum packst du dir 100MB in den RAM ?
Cipher hat eine Methode die sich update(byte[]) nennt. Jetzt liest du einfach wie gewohnt mit nem Buffer das File ein jagst es gleich durch update(byte[]).
Am Ende noch das doFinal(byte[]) und gut ist.

Java:
public static String hash(File input) throws Exception
{
	MessageDigest md=MessageDigest.getInstance("SHA-256");
	FileInputStream fis=new FileInputStream(input);
	int br=0;
	byte[] buf=new byte[1024];
	while((br=fis.read(buf))!=-1)
	{
		md.update(buf, 0, br);
	}
	fis.close();
	byte[] output=md.digest();
	return ToolKit.byteArrayToHexString(output);
}

Hallo,

die Idee ist recht gut, aber irgendwie scheitere ich gerade noch ein wenig an der Umsetzung.
Ich habe das ganze jetzt für eine Verschlüsselung mit Blowfish, wie folgt aufgebaut:
Java:
	public static void encryptBlowfish(File inputFile) throws Exception {
		// Schluesselgenerator für 'Blowfish' erstellen
		KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");

		// Schluessel erzeugen
		SecretKey secretkey = keygenerator.generateKey();

		// Chiffre erstellen
		Cipher cipher = Cipher.getInstance("Blowfish");

		// Chiffre initialisieren
		cipher.init(Cipher.ENCRYPT_MODE, secretkey);

		FileInputStream fis = new FileInputStream(inputFile);
		
		// Text verschluesseln
		int br = 0;
		byte[] buf = new byte[1024];
		
		while ((br = fis.read(buf)) != -1) {
			cipher.update(buf, 0, br);
		}
		fis.close();
	}

Dies orientiert sich ja an deinem Beispiel, nur dass ich keinen String am Ende erzeugen, da ich dieses ja auch nicht benötige. Nur nun sagt er mir, dass er zum Verschlüsselung einer 100MB großen Datei genau 0 Sekunden benötigt. Dies kann meiner Meinung aber nicht so recht angehen... Da muss also irgendwo noch ein Fehler drin sein...
 
T

TheRealSpikee

Gast
Na gut ... abgesehen davon das am Ende noch ein doFinal() fehlt sieht das so schon mal garnicht so schlecht aus.

Jetzt wäre die Frage : WIE misst du die Zeit ? Und kommt die Ausgabe : 0 Sekunden wirklich sofort oder dauert es bis das passiert *was eigentlich der Fall sein sollte*.

Ohne den Code der Zeitmessung werden wir dir hier nicht helfen können.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Java Heap Size -Xmx1024m reicht nicht! Allgemeine Java-Themen 14
U Einbinden libphonenumber Allgemeine Java-Themen 3
T Externe Java Klasen zur Laufzeit einbinden Allgemeine Java-Themen 10
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
E Zahlungsmöglichkeiten im Web-App einbinden Allgemeine Java-Themen 4
T StdCall DLL in Java einbinden Allgemeine Java-Themen 13
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
S Eclipse TestNG: Textfeld einbinden? Allgemeine Java-Themen 1
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
T iText mit eclipse richtig in Java-Projekt einbinden Allgemeine Java-Themen 2
Pataraca Vererbung Code einbinden Allgemeine Java-Themen 3
MaxG. Bilddateien richtig einbinden Allgemeine Java-Themen 9
J Historische Börsendaten einbinden Allgemeine Java-Themen 14
H API einbinden Allgemeine Java-Themen 5
A Applet in HTML einbinden Allgemeine Java-Themen 1
N Eclipse Projekt von GitHub in bestehendes Projekt einbinden Allgemeine Java-Themen 13
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
S Eclipse Annotation Processor in Eclipse einbinden Allgemeine Java-Themen 0
T Eclipse Dll einbinden java.lang.UnsatisfiedLinkError nur in Eclipse nicht via javac Allgemeine Java-Themen 1
D VBScript in .jar einbinden und aufrufen Allgemeine Java-Themen 5
M Datenbankdatei in Java einbinden Allgemeine Java-Themen 16
T C DLL einbinden und Pointer übergeben Allgemeine Java-Themen 13
C images einbinden Allgemeine Java-Themen 7
T Dll erstellen und einbinden Allgemeine Java-Themen 1
S Externe Eclipse Projekte dynamisch einbinden Allgemeine Java-Themen 3
Thallius Externe .jar dynamisch einbinden Allgemeine Java-Themen 5
X 3d Modelle einbinden Allgemeine Java-Themen 1
Developer_X OpenStreetMap in Java Programm einbinden Allgemeine Java-Themen 10
M Eclipse libgcrypt für window in java Projekt einbinden Allgemeine Java-Themen 1
K Website in Programm einbinden und auslesen Allgemeine Java-Themen 2
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
P Sprache ändern ins Programm einbinden Allgemeine Java-Themen 6
L Classpath Klasse einbinden Allgemeine Java-Themen 8
A NodeJs/Javascript txt.Datei einbinden Allgemeine Java-Themen 2
M Barcode und Bilder in PCL einbinden Allgemeine Java-Themen 0
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
J rxtxserial.dll für 32 oder 64bit dynamisch einbinden Allgemeine Java-Themen 9
M Javaprogrammierung in Webapp einbinden Allgemeine Java-Themen 7
U Eclipse Java Projekt - Webservice einbinden Allgemeine Java-Themen 7
M Text datei in java jar datei einbinden Allgemeine Java-Themen 4
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
J excel einbinden Allgemeine Java-Themen 2
S Android: SQLite Framework einbinden Allgemeine Java-Themen 2
G JNotfiy-DLL einbinden Allgemeine Java-Themen 4
R Batch / Shell-Skript in Jar.Datei einbinden? Allgemeine Java-Themen 5
S OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden Allgemeine Java-Themen 9
B Input/Output Einbinden von Daten in Java Allgemeine Java-Themen 3
L Einbinden von Daten in ausführbare Jar Allgemeine Java-Themen 6
E Assembler einbinden Allgemeine Java-Themen 3
X Applet läuft nicht, Applet in Webseite einbinden Allgemeine Java-Themen 4
P Applet java 1.7 in Website einbinden ? Allgemeine Java-Themen 7
P Applet Applet einbinden Probleme Allgemeine Java-Themen 2
T Bild in jar Paket einbinden Allgemeine Java-Themen 9
P Icon aus Exe einbinden Allgemeine Java-Themen 12
E mplayer in Java einbinden Allgemeine Java-Themen 17
A Klasse in GUI einbinden Allgemeine Java-Themen 18
S Javadoc 3d einbinden macht probleme Allgemeine Java-Themen 10
T Java in Website einbinden klappt i-wie nicht Allgemeine Java-Themen 13
U (Land-)Karten in Java Anwendung einbinden (GoogleMaps/OpenStreetMap) Allgemeine Java-Themen 7
M .jar in HTML einbinden Allgemeine Java-Themen 5
T Einbinden einer Library in NetBeans Allgemeine Java-Themen 3
S Jar Graphiken einbinden mit Eclipse Allgemeine Java-Themen 9
S RXTX library in Jar einbinden Allgemeine Java-Themen 5
T DLL in Java einbinden (Quelltext aus Excel VBA) Allgemeine Java-Themen 5
S Dll einbinden Allgemeine Java-Themen 5
S C Sourcecode in Java einbinden Allgemeine Java-Themen 7
S ANT mysql treiber einbinden Allgemeine Java-Themen 4
X Bild aus dem Netz von URL runterladen und in GUI einbinden. Allgemeine Java-Themen 3
F OpenOffice Writer in Java einbinden Allgemeine Java-Themen 8
hdi JavaMail Lib einbinden? Allgemeine Java-Themen 5
U Servlet in Webseite einbinden Allgemeine Java-Themen 1
X dll's in jar einbinden Allgemeine Java-Themen 32
G Eclipse Wie mit Ant build.xml externe Jar´s einbinden? Allgemeine Java-Themen 5
R Font in PDF einbinden Allgemeine Java-Themen 2
M JApplet einbinden in HTML Allgemeine Java-Themen 19
C RXTX Treiber einbinden für Linux Allgemeine Java-Themen 6
M Java Web Start - Native DLL einbinden Allgemeine Java-Themen 2
H Externes Programm in JAR einbinden Allgemeine Java-Themen 11
SuperSeppel13 Dynamische Bibliotheken einbinden Allgemeine Java-Themen 16
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
L einbinden einer php datei Allgemeine Java-Themen 16
A Java Bridge probleme - einbinden fehlgeschlagen/php kennt "java_required" nicht Allgemeine Java-Themen 3
M .jar einbinden Allgemeine Java-Themen 4
D Jython in Applikation einbinden Allgemeine Java-Themen 3
C Fremden Code ins Programm einbinden Allgemeine Java-Themen 12
S Package in verschiedene Projekten einbinden? Allgemeine Java-Themen 3
C Programm ins Kontextmenü vom Explorer einbinden Allgemeine Java-Themen 9
Developer_X Avatar/Bild ins Profil einbinden Allgemeine Java-Themen 10
H Einbinden einer 3rd party DLL via Java Wrapper (JNI) Allgemeine Java-Themen 11
M *.dll Datei (Bibliothek) in Eclipse einbinden Allgemeine Java-Themen 9
S Javadoc einbinden Allgemeine Java-Themen 8
B Eclipse externe Dateien mit einbinden Allgemeine Java-Themen 10
F Java Print mit Applet einbinden Allgemeine Java-Themen 2
J Seltsame Exception beim Java Applet einbinden in Html Allgemeine Java-Themen 2
G Libs in jar einbinden Allgemeine Java-Themen 2
K exe Programm einbinden/ansprechen Allgemeine Java-Themen 5
K jar Datei in Paket einbinden Allgemeine Java-Themen 2
B animierte .gif's in java einbinden Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben