ThreadLocal 원리 및 메모리 누 출 원인
1258 단어 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 라 는 강 한 인용 이 계속 존재 하여 메모리 누 출 이 발생 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 스 레 드 폐쇄 스 택 폐쇄 및 ThreadLocal위의 get 방법의 소스 코드 에서 보 듯 이 threadLocal.get()방법 을 호출 할 때 threadLocal 은 현재 스 레 드 에서 ThreadLocalMap 에서 threadLocal 자 체 를 key...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.