Interpreter-Fehler OutOfMemory Exception mit Base64 decode

Hallo liebe Java Gemeinde,

bisher konnte ich Problemlösungen immer im Netz finden doch diesmal hänge ich ein wenig und bin etwas ratlos. Ich steige seit kurzer Zeit auf Java um und schreibe gerade an einer kleinen Applikation in der Textverschlüsselungen vorkommen.

Ich habe eine kleine Klasse welche mir einen String Base64 En/Decodiert.

Mit folgender Funktion wird der Text verschlüsselt:

Java:
public static String encryptF() throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		byte[] key = keyString.getBytes("UTF-8");	
		MessageDigest sha = MessageDigest.getInstance("MD5");
		key = sha.digest(key);
		key = Arrays.copyOf(key, 16);
		SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
		Cipher cipher = Cipher.getInstance("AES"); 
		cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
		byte[] encrypted = Base64.encodeBase64(cipher.doFinal(msg.getBytes()));
		String secretText = new String(encrypted);
		return secretText;
	}

So weit so gut. Mit folgender Funktion wird der Text wieder entschlüsselt:

Java:
public static String decryptF() throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, OutOfMemoryError{
		byte[] key = keyString.getBytes("UTF-8");	
		MessageDigest sha = MessageDigest.getInstance("MD5");
		key = sha.digest(key);
		key = Arrays.copyOf(key, 16);
		SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
		byte[] decrypted = Base64.decodeBase64(msg);	
		Cipher cipher = Cipher.getInstance("AES"); 
		cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
		byte[] cipherData = cipher.doFinal(decrypted);
		String clearText = new String(cipherData);
		return clearText;
	}
Anmerkung: Die Variablen "keyString" und "msg" befinden sich in der Klasse.

Das hat soweit auch immer funktioniert doch mittlerweile schmeißt mir die Anwendung ständig eine OutOfMemory Exception: "Java heap space" raus wenn ich einen String mit decryptF() entschlüsseln will.

Woran liegt das? Sollte ich noch irgend etwas in der decryptF anpassen damit dieser Fehler nicht mehr vorkommt? Ich kann auch nicht erkennen an welcher Stelle der Memory wohl so vollgepackt wird. Aber dafür fehlt mir momentan noch das grundlegende Verständnis. Ich wäre über jeden Hinweis dankbar.

LG, Andreas
 
Warum glaubst du, dass das Problem an diesen Methoden liegt?
Um ein Memory Problem zu finden sollst du einen Profiler benutzen, dieser kann dir genau verraten wo der Speicher nicht freigegeben wird.
 
Hallo Joose, danke für die schnelle Antwort.

Achso, nun ich hatte es vermutet das es an dieser Funktion liegt, da dieser Fehler nur auftritt sobald decryptF() ausgeführt wird. Wenn ich es auskommentiere und die Applikation ohne Textentschlüsselung laufen lasse taucht dieser Fehler nicht mehr auf.
Aber du hast vermutlich recht.
Möglicherweise macht etwas anderes den Speicher vorher voll so das diese Funktion nicht mehr genügend Kapazitäten vorfindet.

Bevor die Funktion aufgerufen wird erstelle ich ein BufferedImage

Java:
BufferedImage img = ImageIO.read(new URL(url));

Dieses img wird doch auch in den Memory geladen!? Müsste ich das wieder freigeben und wenn ja, wie stelle ich das an?

Ansonsten werde ich mich mal bezüglich des Profilers informieren. Damit habe ich bisher noch keine Erfahrung.

PS. Arbeite mit Eclipse

LG
 

Neue Themen


Zurück
Oben