자바 대상 이 사용 하지 않 을 때 값 을 부여 하 는 null 의 의미 에 대한 자세 한 설명
2627 단어 자바대상값 을 부여 하 다null
public class TestDemo1 {
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
}
System.gc();
}
}
아이디어 설정 gc 로그 인쇄위의 코드 를 실행 하고 그림 gc 로 그 를 불 러 옵 니 다.
지금 우 리 는 위의 테스트 코드 를 수정 하여 place Holder 를 null 로 설정 합 니 다.
public class TestDemo1 {
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
placeHolder = null;
}
System.gc();
}
}
프로그램 을 다시 실행 하여 gc 로 그 를 봅 니 다.위 에 실 린 그림 로그 에서 두 가지 차 이 를 뚜렷하게 볼 수 있 기 때문에 대상 을 null 로 설정 하지 않 아 도 의미 가 있 습 니 다.
왜 이들 의 차 이 를 만 들 었 을 까?
이것 은 jvm 에서 쓰레기 를 인정 하 는 메커니즘 인 접근 성 분석 부터 시작 해 야 한다.
이 접근 성 을 말하자면 먼저 뿌리 를 말 해 야 하 는데'로 컬 변수 표'는 바로 뿌리 라 고 볼 수 있다.
위의 두 단락 코드 로 컬 변수 표 는 다르다.
첫 번 째 코드 를 먼저 보면 place Holder 에 null 의'로 컬 변수 표'가 설치 되 어 있 지 않 습 니 다.
javap-v TestDemo1.class 사용 하기
place Holder 가 로 컬 변수 표 에 있 고 slot 슬롯 1 번 위 치 를 차지 하기 때문에 jvm 은 살아 있다 고 생각 합 니 다.
그 다음 에 우 리 는 place Holder=null 이 코드 의'로 컬 변수 표'의 상황 을 다시 보 았 습 니 다.사실은 위 와 마찬가지 로 차이 가 보이 지 않 습 니 다.
그런데 만약 에 저희 가 place Holder 뒤에 변 수 를 하나 더 설명 하면...
public class TestDemo1 {
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
}
String name = "admin";
System.gc();
}
}
name 이라는 변수 이름 이 slot 슬롯 1 번 위 치 를 차지 하 는 것 을 볼 수 있 습 니 다.place Holder 가 소 용이 없다 는 것 을 설명 할 수 있 습 니까?
그리고 이 코드 는 place Holder=null 의 gc 로그 와 똑 같 습 니 다.그러면 우리 가 설명 한 이 String name="admin"은 스 택 에 있 는 place Holder 와 인 스 턴 스 간 의 관 계 를 끊 었 습 니 다.
place Holder=null 에 도 이런 기능 이 있 을 것 이다.
요약:코드 가 변수 역할 영역 에서 벗 어 날 때 더미 와 의 관 계 를 자동 으로 차단 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.