자바 메모리 구조1. 변수의 저장영역

Programing/Java 2015. 8. 22. 10:29 by kira-master


public class MemoryArchitecture {
	// ======================== Field ===============================================================
	int n1 = 10; 		           // Member Variable(Intance Variable) => 클래스를 생성할때 힙에 올라가는 변수  
	String s1=  "Hello";		   // Member Variable(Intance Variable)
	static int n2= 10;  		   // Class Variable     // => class 변수들은 JVM 의 
	static String s2= "Java"; 	   // Class Variable     // Method 영역에서 클래스가 로드될떄 같이 생성  
	static final int n3= 20;       // final로 선언하면 Class Variable은  상수로 치환되어 Constant Pool 복사 
	static final String s3= "C++"; // final로 선언하면 Class Variable은  상수로 치환되어 Constant Pool 복사 
	
	// ======================== 메소드 내부 안은 로컬 영역 ===============================================
	public static void t1(int a) { // parameter Variable
		int a1; // local Variable 
		int b2; // local Variable
	}// end main
	
} // end class 

자바는 변수들이 Runtime 시점시에 자바 메모리에 크게 

stack 영역 - local Variable , Parameter Variable
class(Methoed) 영역 - Class Variable (static Variable)

heap 영역 -Member Variable(Instance Variable) 


위 구조로 메모리 영역에 들어갑니다.

흔히 필드라고 불리는 곳은 class에서  메소드 내부 안이 아니라 클래스의 내부에서 선언한 

멤버 변수 , 클래스 변수라고 합니다.


Class 변수(Static 변수로)는 class 파일을 실행할 때 JVM의 클래스 영역에서 이미 메모리를 할당되어서 

JVM에 꺼질떄까지 계속 메모리에 상주합니다. 

 

Member 변수(Class 변수는)는 MemoryArchitecture의타입으로 객체가 생성될때 같이 메모리에 올라가서 

참조가 끊길떄까지 계속 메모리에 올라갑니다.  ->가비지 컬렉터가 메모리를 수거하기 전까지 메모리에 올라감


Static final 로 선언한 Class Variable은 JVM의 Class 영역 중에 상수풀로 복사되어서 계속 메모리에 상주합니다.

=> final 로 선언하면 한번 초기화하면 다시 초기화가 불가능합니다.

'Programing > Java' 카테고리의 다른 글

자바 메모리 구조 2  (0) 2015.08.22
String 객체 특징 (== 연산자 특징)  (0) 2015.08.22
홀짝 게임 예제  (0) 2015.08.21
1일차 Subnote  (0) 2015.08.17
1. Variable  (0) 2015.08.15
Nav