ThreadLocal 원리 및 메모리 누 출 원인

ThreadLocal 에는 두 가지 문제 가 있 습 니 다.
1.매개 변수 던 전 은 어디 에 저장 되 어 있 습 니까?
2.변수 던 전 은 공 유 된 변수 에서 어떻게 값 을 부여 합 니까?원본 코드 에서 threadlocal 의 초기 값 은 언제 설정 되 었 습 니까?
ThreadLocal 은 모든 스 레 드 에 변 수 를 유지 하 는 복사 본 입 니까?

모든 스 레 드 의 ThreadLocalMap 은 스 레 드 자체 가 가지 고 있 지만 초기 화 는 ThreadLocal 에 있 습 니 다.그리고 모든 스 레 드 는 하나의 map 를 저장 하 는 것 과 같 습 니 다.
이 map 에 저 장 된 key 는 LocalThread 의 인 스 턴 스 이 고 value 는 저 장 된 스 레 드 의 부분 변수 입 니 다.
get 방법

현재 스 레 드 에 따라 Thread 의 값 가 져 오기
set 방법

현재 스 레 드 에 따라 현재 스 레 드 의 맵 을 가 져 오고 현재 스 레 드 의 값 을 설정 합 니 다.
모든 스 레 드 의 값 이 자신의 ThreadMap 에서 가 져 올 수 있 도록 합 니 다.
ThreadLocal 은 왜 메모리 누 출 을 일 으 킵 니까?

ThreadLocal 의 약 한 인용 은 key 입 니 다.gc 가 회수 하려 고 할 때 ThreadLcoal 은 반드시 회수 합 니 다.Thread ref->Thread->ThreadLocalMap->Entry->value 라 는 강 한 인용 이 계속 존재 하여 메모리 누 출 이 발생 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기