애플리케이션에 할당되는 메모리는 내부적으로 여러 영역으로 나뉘는데 그 중 stack, heap 메모리가 있다.
※ 참고 사항
- 메서드는 클래스에 종속되어 있는 것, 함수는 독립적으로 존재하는 것.
- 즉, 자바는 객체지향 언어이기 때문에 함수가 존재하지 않는다. 메서드가 존재
public class Main {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int result = num1 + num2;
}
}
위와 같은 경우 stack 영역은 아래와 같이 쌓인다.
public class Main {
public static void main(String[] args) {
Cart cart = new Cart();
action(cart);
int count = cart.get();
}
public static void action(Cart c) {
cart.addCart();
cart.addCart();
}
public class Cart {
private int count = 0;
public void addCart() { count++; }
public int get() { return count; }
}
}
public class Main {
public static void main(String[] args) {
Cart cart = action();
}
public static Cart action(Cart c) {
Cart cart = new Cart();
return new Cart();
}
public class Cart {
private int count = 0;
public void addCart() { count++; }
public int get() { return count; }
}
}
위와 같은 경우, 메인 메서드에서 Cart cart = action();을 수행할때, action() 내부에서 객체 생성을 2번 하게된다.
즉, heap 영역에 count = 0이 서로 다른 영역에 생성이 된다.
실제로 Cart cart = action();으로 메인 메서드의 stack frame에서 바라보는 것은 heap 메모리에서 두번째로 생선된 것만 바라본다.
이런 경우 사용하지 않는 heap 메모리가 쌓인다.
JAVA인 경우 JVM의 garbage collector가 자동으로 정리해준다.
form-data에 json list 바인딩(링크) (0) | 2022.09.01 |
---|---|
swagger 설정(spring-boot, gradle) (0) | 2022.08.11 |
ENUM name으로 문자열 가져오기 (0) | 2022.05.09 |
Oauth2 check_token 활성화 (0) | 2022.05.04 |
배열을 문자열로 변환(String.join()) (0) | 2022.04.03 |