Pessoal to fazendo um jogo onde tenho um cliente e um servidor.Fui verificar o consumo de memória pelo emulador e ai blz, o cliente, que não faz muitas operações e verificações, está com ± 47000 bytes, ±800 objetos e nesse ponto o gc executa e fica por ai. o servidor, que é quem faz praticamente todo o trabalho ta um absurdo, enquanto tem espaço no heap ele vai colocando coisa, coloquei 500kb de heap e ele usou tudo, e foi a quase 20 mil objetos, totalmente sem noção.
Um dos pontos que está com um consumo grande é nos métodos abaixo, eles são praticamente acionados a cada interação do loop do jogo.
[code] public String readDataClient() {
byte[] data = new byte[512];
try {
int len = con.receive(data);
String msg = new String(data, 0, len);
return msg;
}
catch (Exception e)
{ System.out.println("readData(): " + e);
return null;
}
} // end of readData()
public String[] readDataServer() {
byte[] data = new byte[512];
try {
int len = con.receive(data);
String msg = new String(data, 0, len);
String[] msgReturn= split(msg,"|");
return msgReturn;
}
catch (Exception e)
{ System.out.println("readData(): " + e);
return null;
}
} // end of readData()
public boolean sendMessage(String msg){
byte[] msgBytes = msg.getBytes();
if (msgBytes.length > 512) {
System.out.println("Message too long, sending \"??\" instead");
msgBytes = "??".getBytes();
}
try {
con.send(msgBytes);
return true;
}
catch (Exception e)
{ System.out.println("sendMessage(): " + e);
return false;
}
} // end of sendMessage()[/code]
Como que eu posso fazer pra diminuir a quantidade de objetos criados? Tentei forcar a chamada do gc mas não adianta, e nem sei se daria muito certo porque ia perder desempenho que é algo que o jogo precisa.
Quando eu chamo o gc pelo monitor do wtk ele cai a praticamente a mesma quantidade de memoria e objetos sendo usados do cliente. :???: