Compiler-Fehler Heap space!

stulleman

Bekanntes Mitglied
Guten Abend zusammen!

Ich habe ein Problem mit meinem Projekt. Anfangs habe ich einen UDP Client und Server geschrieben die permanent Daten austauschen um zum Beispiel ein multiplayer Spiel zu realisieren. Das hat ganz gut geklappt, jedoch fand ich es etwas umständlich, also wollte ich es mit TCP versuchen, um auch Geschwindigkeit und Paketverluste zu vergleichen.

Ich habe wirklich alles versucht: Etliche syso's, VisualVM um zu gucken ob irgendein Programm mit den ganzen Heap Space raubt und den Debugger. Ich habe leider nichts gefunden. Ich poste jetzt mal die wichtigsten Codestellen, vielleicht fällt irgendjemanden ja mal was auf:

Client (Animation Thread) :
Java:
@Override
	public void run() {
		while(true) {
			long start = System.currentTimeMillis();

			update();
			connection.sendObject(MPConnection.TYPE_PLAYER_UPDATE, player);
			player_list = connection.getPlayerUpdate();
			repaint();

			long diff = System.currentTimeMillis() - start;

			if(diff >= 10) {
				diff = 5;
			}

			try {
				Thread.sleep(10 - diff);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

Client (Connection):

Java:
public class MPConnection implements Runnable {
	
	public static final int ERROR = -1;
	public static final int TYPE_MESSAGE = 0;
	public static final int TYPE_PLAYER_UPDATE = 1;
	public static final int TYPE_PLAYER_LIST = 2;
	
	private Socket socket;
	private DataInputStream in;
	private DataOutputStream out;
	private Thread thread;
	
	// Game specific variables
	
	private ArrayList<MPPlayer> player_list = new ArrayList<MPPlayer>();
	
	public void connectToServer(String ip, int port) {
		try {
			socket = new Socket(ip, port);
			
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());
			
			thread = new Thread(this);
			thread.start();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void sendObject(int objectType, Object obj) {
		byte[] objectBytes = ObjectConverter.convertObjectToByteArray(obj);
		
		try {
			out.writeInt(objectType);
			out.writeInt(objectBytes.length);
			out.write(objectBytes);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public void run() {
		while(true) {
			int messageType = -1;
			
			try {
				messageType = in.readInt();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			if(messageType == TYPE_MESSAGE) {
				
			}
			
			if(messageType == TYPE_PLAYER_LIST) {
				try {
					int length = in.readInt();
					byte[] objectBytes = new byte[length];
					
					in.readFully(objectBytes);
					
					player_list = (ArrayList<MPPlayer>) ObjectConverter.convertByteArrayToObject(objectBytes);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public ArrayList<MPPlayer> getPlayerUpdate() {
		return player_list;
	}
}

Server:

Java:
package de.pk.maximilian.games;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class MPServer implements Runnable {

	private Thread thread;
	private ServerSocket socket;
	private ArrayList<MPServerThread> clients = new ArrayList<MPServerThread>();
	
	// Game specific variables
	
	private ArrayList<MPPlayer> player_list = new ArrayList<MPPlayer>();
	
	public MPServer(int port) {
		System.out.print("Starting server on port " + port + "... ");
		
		try {
			socket = new ServerSocket(port);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		System.out.println("Running!");
		
		thread = new Thread(this);
		thread.start();
	}
	
	public void updatePlayerList(MPPlayer newPlayer) {
		for(MPPlayer oldPlayer: player_list) {
			if(oldPlayer.getId().equals(newPlayer.getId())) {
				player_list.set(player_list.indexOf(oldPlayer), newPlayer);
				broadcastObject(MPConnection.TYPE_PLAYER_LIST, player_list);
				return;
			}
		}
		player_list.add(newPlayer);
		broadcastObject(MPConnection.TYPE_PLAYER_LIST, player_list);
	}
	
	public void broadcastObject(int objectType, Object obj) {
		for(MPServerThread client: clients) {
			client.sendObject(objectType, obj);
		}
	}
	
	@Override
	public void run() {
		while(true) {
			try {
				Socket clientSocket = socket.accept();
				MPServerThread serverThread = new MPServerThread(clientSocket, this);
				clients.add(serverThread);
				
				System.out.println("Accepted new client (" + clientSocket.getLocalAddress().getHostAddress() + ")");
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			try {
				Thread.sleep(10);
			} catch(InterruptedException e) {
				e.printStackTrace(); 
			}
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MPServer(6493);
	}
}

ServerThread:

Java:
package de.pk.maximilian.games;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class MPServerThread implements Runnable {

	private Thread thread;
	private MPServer mpServer;
	private DataInputStream in;
	private DataOutputStream out;
	
	public MPServerThread(Socket socket, MPServer mpServer) {
		this.mpServer = mpServer;
		
		try {
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		thread = new Thread(this);
		thread.start();
	}
	
	public void sendObject(int objectType, Object obj) {
		byte[] objectBytes = ObjectConverter.convertObjectToByteArray(obj);
		
		try {
			out.writeInt(objectType);
			out.writeInt(objectBytes.length);
			out.write(objectBytes);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		while(true) {
			int messageType = -1;
			
			try {
				messageType = in.readInt();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			if(messageType == MPConnection.TYPE_PLAYER_UPDATE) {
				try {
					int length = in.readInt();
					byte[] objectBytes = new byte[length];
					
					in.readFully(objectBytes);
					
					MPPlayer player = (MPPlayer) ObjectConverter.convertByteArrayToObject(objectBytes);
					mpServer.updatePlayerList(player);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
 

bERt0r

Top Contributor
Naja alleine sowas wie "byte[] objectBytes = new byte[length];" in einer Endlosschleife ist schonmal nicht Heapsize freundlich. Warum musst du denn jedesmal ein neues Array anlegen? reicht nicht eines, wenn du ohnehin direkt danach das array in ein anderes Objekt umwandelst?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
L Java OutOfMemoryError Java heap space Allgemeine Java-Themen 3
H Änderung im maximalen heap space unter Windows 7 ?! Allgemeine Java-Themen 5
N Mögliches heap space lokalisieren Allgemeine Java-Themen 11
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
A Umgebungsvariable Kann Heap Space nicht vergrößern Allgemeine Java-Themen 6
Guybrush Threepwood Heap-Space "überwinden" Allgemeine Java-Themen 2
O Problem mit dem Heap Space (Speicherüberlauf) Allgemeine Java-Themen 12
S Java heap space zu klein? Allgemeine Java-Themen 6
B Java Heap Space Allgemeine Java-Themen 5
A OutOfMemoryError: Java heap space Allgemeine Java-Themen 11
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
I Java heap space Allgemeine Java-Themen 3
K Erhöhung Java Heap Space in Netbeans 6.5 - funktioniert nicht oder bringt nichts? Allgemeine Java-Themen 1
T zu Beginn der main: Heap space ermitteln und hochsetzen Allgemeine Java-Themen 11
K OutOfMemoryError: Java heap space troz -Xms1024m Allgemeine Java-Themen 2
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
V Java heap space Problem Allgemeine Java-Themen 8
V Wieso Heap Space Problem? Allgemeine Java-Themen 14
Saxony ANT, ProGuard und Java heap space Allgemeine Java-Themen 8
V fehlermeldung heap space, endlosschleife??? Allgemeine Java-Themen 4
P Java Heap Space Allgemeine Java-Themen 11
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
P Java Heap Space Exception Allgemeine Java-Themen 30
MQue Java Heap space Probleme Allgemeine Java-Themen 26
Y PDF Report mit Tomcat Heap Space Problem Allgemeine Java-Themen 9
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
M Aktuellen heap space ermitteln? Allgemeine Java-Themen 2
G Wird bei RAM-Mangel für Java Heap Space geswappt? Allgemeine Java-Themen 34
B Der Heap Space, ich weiß nicht mehr weiter! Allgemeine Java-Themen 15
H java heap space (outofmemory error) Allgemeine Java-Themen 3
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
L Häufigkeit der Werte in Datei zählen! Heap Space beschränkt! Allgemeine Java-Themen 31
C Java heap Space, aber wie wegkriegen? Allgemeine Java-Themen 3
A Heap-Sort Allgemeine Java-Themen 2
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
T jstat Heap(Size/Usage) PermGen(Size/Used) vs JVisual VM Allgemeine Java-Themen 2
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
V Java Heap Size -Xmx1024m reicht nicht! Allgemeine Java-Themen 14
C Method Area, Stack, Heap Allgemeine Java-Themen 7
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
M *.jar >>> *.exe und "heap size" Allgemeine Java-Themen 11
E Konfigurieren des Java Heap-Spaces Allgemeine Java-Themen 5
D Java Heap error trotz anpassungen mit -xmx Allgemeine Java-Themen 4
A Heap in Jcreator erhöhen? Allgemeine Java-Themen 5
P Java Heap Size feststellen Allgemeine Java-Themen 6
K Heap-Volllaufen bei ArrayList<Integer> Allgemeine Java-Themen 9
byte JVM Maximum Heap (Windows XP Prof. 32bit) Allgemeine Java-Themen 4
A Wie am besten Daten auslagern um heap zu schonen Allgemeine Java-Themen 4
G Probleme mit dem Java heap Allgemeine Java-Themen 14
E Heap und Comparable (warning: [unchecked] unchecked cast) Allgemeine Java-Themen 2
kb22 CMS mit großen Dateien (heap problem) Allgemeine Java-Themen 3
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
S Java Heap Dump erstellen Allgemeine Java-Themen 1
MQue Heap erhöhen Allgemeine Java-Themen 8
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
P Dump von JavaWS Heap Allgemeine Java-Themen 4
P Java heap Allgemeine Java-Themen 5
M JVM Non-Heap läuft voll Allgemeine Java-Themen 4
T Langsames Laden von Bildern und Heap Exception Allgemeine Java-Themen 7
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
G Zum tausendsten Mal Heap Size Allgemeine Java-Themen 5
P out of memory -> heap wächst und wächst Allgemeine Java-Themen 7
S Heap dump Allgemeine Java-Themen 3
F Heap Overflow Allgemeine Java-Themen 9
D statisch heap size erhöhen Allgemeine Java-Themen 4
V Serialisierungsproblem bzw. Heap Problem Allgemeine Java-Themen 13
P Jave Heap Size und ObjectStreams.ein java bug ? Allgemeine Java-Themen 5
welterde Heap Überlauf Allgemeine Java-Themen 2
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2
N Speicher Problem bei grossem Heap Allgemeine Java-Themen 15
M lauffähiges Java Program auf Web Space Allgemeine Java-Themen 2
C JTextPane + HTMLEditorKit withe space problem Allgemeine Java-Themen 0
D OutOfMemoryError:Java hep space Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben