먼저 jvm 메모리 모델에 대해 이야기해 보겠습니다.
jvm 메모리는 메소드 영역, 힙, 스택 및 프로그램 카운터로 구분됩니다.
메서드 영역, 스택 및 힙에 대해 간략하게 설명하겠습니다.
메서드 영역: 각 스레드가 공유하는 영역으로 클래스 정보/상수/정적 변수를 저장합니다.
스택: 실제로 각 스레드는 스택을 할당합니다. . 수명 주기는 스레드의 수명 주기와 동일합니다. 메서드를 실행할 때 스택 프레임이 생성되고 스택 프레임에는 메서드의 지역 변수가 포함됩니다.
힙: 모든 클래스 인스턴스화는 힙에 저장됩니다.
(추천 동영상 튜토리얼: java 동영상 튜토리얼)
1. 메모리 관점에서 정적과 비정적의 차이점을 분석합니다.
static은 멤버 변수와 멤버 메서드, 그리고 그 값이 있는 주소를 수정합니다. 메소드 영역에 저장됩니다. 상수 풀의 실행 순서는 클래스를 로드할 때 정적으로 수정된 변수 이름이나 메서드를 상수 풀에 저장하는 것입니다.
정적으로 수정되지 않은 변수는 멤버 변수와 로컬 변수가 될 수 있습니다.
멤버 변수는 클래스의 일부이고 주소가 힙에 있기 때문에 객체가 저장된 주소와 동일합니다.
로컬 변수는 일반적으로 메소드에서 선언되며 해당 저장 주소는 스택에 있습니다.
2. 실행 메커니즘 분석
소스 코드가 컴파일러에 의해 .class 바이트코드 파일로 컴파일될 때 클래스가 로드되면 static으로 수정된 블록/변수/메서드가 즉시 저장됩니다. 메서드 영역에서는 동시에 비정적 블록/변수/메서드가 아직 컴파일되지 않았습니다. 비정적 변수가 정적 메서드에 저장되면 프로그램 카운터가 로컬 변수를 나타낼 때 오류가 보고됩니다. 현재 변수로 컴파일되지 않았기 때문입니다.
추천 튜토리얼: java 입문 프로그램
위 내용은 Java에서 정적과 비정적의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!