자바는 JVM에 의해 실행되므로 어떤 운영체제에서도 동일한 결과를 갖는 것이 큰 장점이다.
단, 한 단계 더 거쳐서 실행되기 때문에 실행 속도면에서 뒤처질 수 있다.
런타임 데이터 영역 (Runtime Data Area)
1. Static Area (Method Area)
2. Heap Area
3. Stack Area
4. PC Register
5. Native Method Stack
이 글에서는 2, 3번 힙과 스택에 대해서만 정리한다.
Stack
Heap
원시타입의 데이터가 값과 저장
Object 타입의 데이터가 저장
Heap 영역에 생성된 Object 타입의 데이터의 참조값이 저장
애플리케이션의 모든 메모리 중 Stack을 제외한 부분
함수가 호출될 때 사용하는 메모리 기능 수행이 끝나면 자동으로 반환되는 메모리
자동으로 관리되지 않는 메모리 영역 (가비지 컬렉터)
Stack 영역
public class Stack {
public static void main(String[] args) {
int num1 = 20;
int num2 = 30;
int sum = 0;
sum = addNum(num1, num2);
System.out.println(sum);
}
public static int addNum(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
Heap 영역
public class Heap {
public static void main(String[] args) {
int age = 19;
String name = "mimi";
}
}
Heap 영역에서 GC (Garbage Collection)
- 메모리 누수를 막기 위한 가비지 컬렉션
public class Heap {
public static void main(String[] args) {
String url = "http://";
url += "mimi.github.io/";
}
}