JVM
-
Managed Language 자바, 자바는 어떻게 힙에서 제거할 객체를 알아낼까?TECH/Java 2022. 11. 29. 11:23
Managed Language Java vm은 객체가 더 이상 필요 없을 때 메모리를 회수한다. 프로그래머가 직접 메모리를 해제해야 하는 다른 언어와 가장 큰 차이점이다. 자바에서 메모리 leak이 발생하는 것은 불가능하다. 자바에서 new 키워드를 사용할 경우 os에서 메모리를 가져오는 것이 아니라 virtual machine을 통해서 가져오게 된다. virtual machine은 c로 작성된 프로그램이고, 이 프로그램이 os에서 가져온 메모리를 관리한다. 따라서 vm에 문제가 없다면, os 레벨의 메모리 leak은 발생할 수 없다. 메모리 leak이 발생했다면 그것은 vm의 문제이고 자바 프로그래머의 책임이 아니다. GC는 메모리를 free up하는 과정이다. GC는 Lisp에서 개발되었고, 자바는 ..
-
JVM 메모리 - heap, stackTECH/Java 2022. 8. 7. 11:24
JVM의 메모리는 크게 힙, 스택, 메타 영역으로 나뉜다. 그 중 스택과 힙 영역에 대해 먼저 알아보자. Stack 스택은 쓰레드 생성과 함께 생성된다. 쓰레드는 자신의 스택만 볼 수 있다. 즉 쓰레드 세이프하다.(다른 쓰레드의 데이터를 볼 수 없다.) 함수가 호출될 때 파라미터의 복제본이 스택에 push되고, 해당 함수의 변수들도 스택에 push 된다. 함수가 리턴할 때 스택에 저장된 데이터들이 pop된다. LIFO 구조 Stack에 접근하는 것은 heap 메모리에 접근하는 것보다 빠르다. Heap 스택은 객체와 같은 복잡한 데이터를 저장하는데 사용할 수 없다. primitive 타입과 같은 단순한 데이터 타입만 저장할 수 있ㄷ가. 스택에 저장되지 않은 모든 데이터는 heap에 저장된다. 스택과 달리 ..