2011-08-17 2 views
1

나는 j2ee 응용 프로그램을 가지고 있고 내부에는 여러 스레드 T1, T2, T3.Now를 시작하는 클래스 1이 있습니다. 또한 webserrvice.Now를 가지고 있습니다. 내 스레드 T1, T2, T3를 원할 때까지 실행해야합니다. 웹 서버가 중지되었거나 응용 프로그램이 배포 취소되었습니다. 내 스레드가 내부적으로 일부 URL에 연결하고 db와 관련된 작업 및 기타 작업을 수행합니다.indefinatley를 실행하는 스레드가 메모리 누수를 일으킬 수 있습니까?

1) 이제 내 스레드를 시작하는 코드가 servletContextListener에서 호출됩니다. 메모리 누수가 발생할 수 있다는 Tomcat 콘솔 경고가 표시됩니다. 문제가 있습니까?
2) 내 스레드에서 다른 서버의 URL에 연결할 수 있습니다. 내 로컬 포트에이 충돌이 발생합니다.

답변

0

나는 오랫동안 실행중인 모든 스레드가 메모리 누수를 경험할 수 있다고 확신합니다. 메모리 누출은 GC와 관련이 있으며 스레드가 아닌 파이널 라이즈입니다.

포트 80에 대한 연결을 목표로 설정했다고해서 포트 80에서 통신을 시작한다는 의미는 아닙니다. 서버가 항상 포트 80에서 응답해야하고 포트 80에서만 수신하거나 보낼 수 있기 때문에 . 전송은 다른 포트에서 이루어져야합니다. 따라서 로컬 포트와 충돌하지 않습니다.

0

메모리 누수는 활성 항목으로 인해 발생합니다. 스레드가 주 프로그램보다 메모리 누출을 일으켜 메모리 누수를 일으킬 가능성은 더 높지 않습니다.

그러나 여러 스레드가 있으면 처리되지 않은 자원의 가능성이 커집니다.

0

스레드와 같은 리소스를 생성하면 메모리 누수가 발생할 수 있습니다. 그러나 고정 된 수의 스레드를 만드는 것이 필요한 경우 메모리 누수를 고려하지 않아도됩니다.

0

1) 아니오. 장시간 실행중인 쓰레드는 Out of mem을 발생시키지 않습니다. 예외. 리소스를 닫으려면 스레드에서 잊어 버린 경우에만 메모리 등을 비우십시오.

2) 아니요. 서버는 포트 80에서 통신합니다. 클라이언트는 그렇지 않습니다.

관련 문제