Boas pessoal, estou com um problema aqui e já não sei mais o que fazer.
Criei uma aplicação onde há comunicação entre um Raspberry (servidor) e vários ESP12 (clientes) utilizando socket e serversocket. Tudo funciona bem, exceto pelo aumento contínuo do consumo de memória durante a comunicação, e como o Raspberry não tem muito, com pouco tempo a aplicação começa a ficar lenta e inutilizável.
Já não sei mais o que fazer, rodei aquele visualVm mas não consegui detectar o que pode ser. Abaixo meus códigos:
Trecho da classe que inicializa o servidor:
private class server3000 extends Thread {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(3000);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Conectado a porta 3000");
new Servidor3000(socket).start();
}
} catch (IOException ex) {
System.err.println("Erro: " + ex.getMessage());
}
}
}
Trecho que trata o servidor:
public class Servidor3000 extends Thread {
//inicializo algumas variáveis
private Socket socket;
DataInputStream is;
DataOutputStream os;
JSONObject json;
public Servidor3000(Socket socket) throws IOException {
this.socket = socket;
}
@Override
public void run() {
try {
DataInputStream is;
is = new DataInputStream(socket.getInputStream());
DataOutputStream os;
os = new DataOutputStream(socket.getOutputStream());
JSONObject json;
try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) {
PrintWriter pw = new PrintWriter(os);
//trato algumas coisas
String string = "{String json que será enviada}";
pw.println(string);
pw.flush();
//Recebe
json = new JSONObject(in.readLine());
//Trato os dados recebidos
pw.close();
}
is.close();
os.close();
json = null; //tentativa desesperada
System.gc(); //
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException ex) {
Logger.getLogger(Servidor3000.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Alguém poderia me ajudar?