2018-3-13 TIL Java Memory Model
자바의 메모리모델과 Object클래스
- 자바 가상머신 메모리 관리 방식을 ‘자바 메모리 모델’이라고 한다
자바의 메모리모델
자바의 메모리모델은 크게 메소드영역, 스택영역, 힙영역으로 나눌 수 있다.
- 메소드영역(Method Area) : 메소드영역은 클래스의 정보가 메모리 공간에 옮겨질 때 채워지는 영역이다.
- 스택영역(Stack Area) : 지역변수, 매개변수가 저장되는 공간이다. “중괄호가 구분되는 지역 내에서만 유효한 변수들이다” 매개변수와 지역변수는 선언되는 순간에 스택에 할당이 되었다가 자신이 할당된 영역을 벗어나면 소멸이된다.
- 힙영역(Heap Area) : 인스턴스가 할당이 된다. 자바의 인스턴스 소멸 방식을 ‘가비지컬렉션(Garbage Collection)”이라한다.
Object클래스
- 인스턴스 비교 equals 메소드
package yoon;
class INum {
private int num;
public INum(int num) {
num = this.num;
}
@Override
public boolean equals(Object obj) {
if(this.num == ((INum)obj).num)
return true;
else
return false;
}
}
public class ObjectEquals {
public static void main(String [] args) {
INum num1 = new INum(10);
INum num2 = new INum(12);
INum num3 = new INum(10);
if(num1.equals(num2))
System.out.println("num1, num2 내용이 동일하다.");
else
System.out.println("num1, num2 내용이 다르다.");
if(num1.equals(num3))
System.out.println("num1, num3 내용이 동일하다.");
else
System.out.println("num1, num3 내용이 다르다.");
}
}
//result
num1, num2 내용이 동일하다.
num1, num3 내용이 동일하다.
package yoon;
public class StringEquality {
public static void main(String [] args) {
String str1 = new String("So Simple");
String str2 = new String("So Simple");
//참조 대상을 비교하는 if ~ else
if(str1 == str2)
System.out.println("str1, str2 참조 대상 동일하다.");
else
System.out.println("str1, str2 참조 대상 다르다.");
// 두 인스턴스 내용을 비교하는 if ~ else
if(str1.equals(str2))
System.out.println("str1, str2 내용 동일하다.");
else
System.out.println("str1, str2 내용 다르다.");
}
}
//result
str1, str2 참조 대상 다르다.
str1, str2 내용 동일하다.
- 두 인스턴스의 내용 비교를 원한다면 Object클래스의 equals메소드를. 단순 참조변수의 값을 비교하려면 == 연산을 사용하자.
Written on March 13, 2018