얼마 전 면접에서 기술질문을 받았는데 큰 틀만 알고 있어서
제대로 설명을 하지 못한 것에 큰 아쉬움이 있어 살짝 기록해 본다.
진정한 자바 메모리에 대해 깊게 공부한 내용은 아니지만
일단 기본 내용부터 점점 심화하는 것도 이해를 높이는 좋은 방법이지 않을까 생각한다.
(기술 질문에 약한 편이라 계속 공부중..ㅠ)
자바에 대해 살짝 맛보기 내용부터!
JVM (Java Virtual Muchine)
- 자바 가상 머신
- 자바의 바이트 코드를 해석하고 실행하는 역할
자바 프로그램의 실행 구조
프로그램
JVM
운영체제
하드웨어
자바는 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/";
}
}
url += 부분 코드를 실행하면 기존 문자열에 덧붙이는 것이 아닌
새로운 String 객체를 생성하고 참조하게 되어
기존의 문자열"https://"는 unreachable object가 되어
가비지 컬렉터가 unreachable object를 제거한다.
위 코드를 실행하면 힙 영역에는 결과적으로 2만 남게 된다.
*unreachable object : 스택에 도달할 수 없는 힙 영역의 객체
'Coding > Study' 카테고리의 다른 글
[IT 용어] API (Application Programming Interface) (0) | 2023.10.14 |
---|---|
[JAVA] 람다식 Lambda (0) | 2023.10.05 |
[JSP] JSP 강의평가 웹 사이트 개발하기 완료 (0) | 2023.10.02 |
[GitHub] 깃, 깃허브 (0) | 2023.09.28 |
[Kotlin] 코틀린 맛보기 (0) | 2023.09.22 |