MINA 클라이언트에 대해 약간의 문제가 있습니다.Apache MINA는 사용하지 않은 데이터를 제거하지 않습니다.
서버에 대한 연결을 하나만 만들면 서버는 주기적으로 일종의 데이터를 보냅니다.
요약하면 클라이언트가 서버에 연결됩니다. 서버는 클라이언트에 문자열을 되돌려 보내고 모든 단계는 동일한 열린 연결 (동일한 클라이언트 객체 및 클라이언트 처리기)을 사용합니다.
하지만 문제는 이전 데이터가 GC로 수집되지 않는다는 것입니다. 사용 된 힙은 초 단위로 커지고 결코 줄어들지 않습니다. 내 messageReceived 메서드가 비어 있습니다!
public void messageReceived(IoSession session, Object message) { }
아이디어가 있으십니까?
VisualVM을 사용하여 시스템을 모니터링하고 몇 분 동안 실행하도록했습니다. 예상대로, 메모리 값이 증가하면 응용 프로그램이 OutOfMemory 예외를 throw합니다. 서버는 문자열을 Client로 보냅니다. char [] 변수가 증가하는 이유입니다. 클라이언트와 서버 모두 서로를 듣는 스레드를 가지고 있습니다. 어쩌면 GC는 스레드에서 문자를 수집하지 않습니다 (이유는 모르겠다)? 이 상황에서 도움이 정말로 필요합니다. – ftb
GC는 보존중인 항목을 정리하지 않습니다. char *]를 참조하는 것이 * 이것이 정리되지 못하게하는 것을 찾아야합니다. BTW 나는 당신이 그렇지 않으면 당신의 프로그램이 실제로'String'을 유지하고 있다고 의심합니다. ;) –
그리고 나는 매번 새로운 연결을 의미하는 새로운 Client 객체를 만들면 mem이 증가하지 않는다는 것을 알았다. 스레드와 그 변수를 죽이면 사용 된 메모리가 해제된다는 뜻입니다. – ftb