자바 메모리 구조 2

Programing/Java 2015. 8. 22. 11:49 by kira-master

참고 공부 자료 http://performeister.tistory.com/75

package com.lec.java;

public class Myclass {
	private int a;
	private int b;
	
	public Myclass(){}
	
	public static void result(){
		System.out.println("myclass 입니다.");
	}
	
} // Myclass  


package com.lec.java;

public class Intance {
	public static void main(String[] args) {
		Myclass m1 = new Myclass();
		Myclass m2 = new Myclass();
		System.out.println("m1 == m2 "+(m1 == m2)); // false 
		System.out.println();
		System.out.println("m1 : "+m1);
		System.out.println("m2 : "+m2);
		System.out.println();
		System.out.println("m1 해쉬 코드 :" +m1.hashCode());
		System.out.println("m2 해쉬 코드 :" +m2.hashCode());
		
	}// end main
} // end class



결과값 
// m1 == m2 false

// m1 : com.lec.java.Myclass@659e0bfd
// m2 : com.lec.java.Myclass@2a139a55

// m1 해쉬 코드 :1704856573
// m2 해쉬 코드 :705927765
// 레퍼런스 변수에는 객체 대한 참조값이 들어간다. 어떤 JVM 영역의 힙 영역 중  어떤 메모리 주소를 가르킬지를 참고하는 것이다.
// 객체는 생성 될떄마다 항상 새로운 힙의 주소를 가지고 , 만약에 더이상 참조 되지 않으면 힙에서 가비지 컬렉터가 메모리를 반환시켜버리고 
// 다시 생성하여도 항상 다른 힙에 대한 주소를 가질수 밖에 없다.


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

POJO 의 개념과 예시  (0) 2015.08.24
Singleton 정리  (0) 2015.08.23
String 객체 특징 (== 연산자 특징)  (0) 2015.08.22
자바 메모리 구조1. 변수의 저장영역  (0) 2015.08.22
홀짝 게임 예제  (0) 2015.08.21

String 객체 특징 (== 연산자 특징)

Programing/Java 2015. 8. 22. 11:31 by kira-master


package com.lec.java;

public class String01 {
	public static void main(String[] args) {
		String a = "Hello"; // String 문자열을 "" 식으로 대입 연산자로 대입 시키면 
		String b = "Hello"; // Stirng 문자열은 상수풀에 저장되어 버린다.
		System.out.println(a==b)
                // == 연산자는 reference 변수의 참조값을 비교함 // 상수풀에 복사되어 같은 곳을 바라봄  
		//result => true
		System.out.println(a.hashCode());
		System.out.println(b.hashCode());
		// 두 객체의 해시코드 값은 같다. 
		
		String a2 = new String("Java");
		String b2 = new String("Java");
		System.out.println(a2==b2); // new 연산자를 사용하여 생성하면 다른 객체로 두개 생성
		// result => false
		System.out.println(a2.hashCode());
		System.out.println(b2.hashCode());
		 
		
		// 유의점 
		//hashCode값 출력(문자열값이 같으므로 같은 hashCode)
		//스트링 키객체의 주소가 달라도 같은 값을 가지면 객체의 해쉬 코드는 같다
		//String 클래스에 hashCode()메소드가 오버라이딩 되있기 때문에           
		//키 객체의 값이 같을때 이와 같이 같은 헤쉬코드를 리턴해야 
               //해쉬테이블, 해쉬맵 사용시 제대로된 Key로써 역할을 하기에 오버라이딩함
		
		// 본인 설명 추가++ 
		// 원래 Object의 Class 의  hashCode() 메소드랑은 메소드 내부가 다르게 정의됨 .
		// 그래서 String 객체는 다른 일반적인 객체들과 달리 같은 문자열이 같으면 해쉬코드도 같음 
		
		/* => 결과값 
		 * true
		   69609650
                   69609650
                   false
                   2301506
		   2301506
		 * 
		 */
		
	}
} // end class 



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

Singleton 정리  (0) 2015.08.23
자바 메모리 구조 2  (0) 2015.08.22
자바 메모리 구조1. 변수의 저장영역  (0) 2015.08.22
홀짝 게임 예제  (0) 2015.08.21
1일차 Subnote  (0) 2015.08.17

자바 메모리 구조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