2014-01-21 3 views
-2

서블릿에서 사용할 수있게되면서 동시에 콘텐츠를 저장하는 Tomcat 서블릿을 사용하고 있습니다. 하나의 요청에는 저장할 필요가있는 수천 개의 구성 요소 (구성 요소)가있을 수 있습니다.다중 스레드를 사용하는 자바 관리 메모리

동시성을 처리하기 위해 스레드 포인터의 고정 크기 테이블을 사용합니다. 구성 요소가 저장 될 수있게되면 저장 개체가 테이블의 슬롯에 할당되고 실행이 시작됩니다. 스레드가 완료되면 슬롯은 NULL로 설정되고 필요에 따라 다른 저장 개체가 할당됩니다. 테이블의 모든 슬롯이 사용되면 테이블에서 주기적으로 완료된 스레드가 검사되고 스레드가 대체됩니다.

가비지 수집으로 인해 디딜 방아가 사용하는 메모리가 완전히 지워지지 않으므로이 모델로 메모리를 관리하는 것은 어려울 수 있습니다. 이로 인해 메모리 오버플로나 메모리 복구가 너무 작아 질 수 있습니다.

이 유형의 GC를 처리 할 수있는 방법이 있습니까? 예 : 동기화가 필요하며 GC가 뒤따라야합니까? 이 유형의 처리와 일치하는 Java 동시성 처리기가 있습니까?

어떤 제안이라도 인정 될 것입니다. 내가 원래 생각했던

감사

+3

단일 요청을 완료 한 후에 왜 스레드를 죽여야하는지 알 수 없었습니다. 고정 된 스레드 풀을 사용하고 생산자/소비자 패턴을 적용하고 스레드를 다시 사용하십시오. – khachik

+2

"쓰레기 수거는 쓰레기 더미가 사용하는 메모리를 완전히 청소하지 않습니다." 너 무슨 소리 야? – Kayaman

답변

0

는 GC에서이 문제를 완전히 메모리가 난 단지 부분적으로 만 정리 한 작은 GC 수집을 보는 것을이었다 청소하지 않았다. 주요 수집이 발생하면 최대 10 분간 서비스가 중단됩니다.

다른 수집기로 실험 한 후에 버전 7에서 새 G1 수집기처럼 보입니다.

조사한 사람들에게 감사드립니다.

관련 문제