JVM(java virtual machine)은 메모리를 스택(stack)과 힙(heap) 메모리로 나눈다. 새로운 변수와 객체를 선언하거나, 새로운 mathod를 호출하거나, 문자열을 선언 하거나, 이와 유사한 작업을 수행할 때마다 JVM은 stack 메모리 또는 heap 공간 에서 이러한 작업에 메모리를 지정한다.
JVM의 메모리 공간은 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 되게 된다.
[Stack Memory]
- Java의 스택 메모리는 정적 메모리 할당과 스레드 실행에 사용된다. 여기에는 메서드에 특정한 기본 값과 힙에 있는 메서드에서 참조된 객체에 대한 참조가 포함된다.
- 새로운 메소드를 호출할때 블락은 스택의 꼭대기 영역에서 생성된다.
- 메소드가 실행을 끝냈을떄, 스택프레임이 호출메소드로 들어가고 다음 메소드를 위한 공간이 된다.
ex)main()method로 들어갈때 스택 메모리에 이 메소드의 기본 요소와 참조를 저장하기위한 공간이 생성된다.
스택 메모리의 특징
- 새로운 메소드가 호출되고 반환땔때마다 커지고 같아진다.
- 메소드가 실행을 끄내면 자동으로 할당되고 비할당됨
- 메모리가 꽉차면 자바는 java.lang.StackOverFlowError를 띄운다.
- 힙 메모리에 비해 접근이 빠르다
- 각 스레드든 자신만의 스택을 갖는다.
[Heap Space]
힙 공간은 객체과 클래스의 동적 메모리 할당에 이용된다. 새 객쳉는 항상 새로운 힙 공간에서 생성되며, 이러한 객체에 대한 참조는 스택메모리에 쌓인다.이러한 객체들은 우리가 어디에서나 접근할수있다.
우리는 이 메모리 모델을 세대라는 작은 부분으로 나눌 수 있다.
- Young Generation-모든새로운 객체가 생성되고 유지되는 곳.Garbage collection이 이것이 채워질때 발생한다.
- Old or Tenured Generation-오래된 객체가 저장되는 곳. 객체가 Young Generation에서 저장될때 객체가 한계점에 도달하면 Old Generation으로 이동한다.
- Permanent Generation-메타데이터 클래스들과 어플리캐이션 메소드들의 구성
힙메모리의 특징
- 힙 메모리는 Old or Tenured Generation,Young Genration을 포함하는 복잡한 메모리 관리 기술에 접근함.
- 스택메모리와 달리, 자동으로 비할당되지 않는다.
메모리의 효율을 높이기 위한 사용되지 않는 객체룰 지우는 Garbage Collector가 필요 - stack과 달리 힙은 스레드를 보호하지 않고 코드를 적절히 동기화 함으로써 보호되야 한다.
더 자세히 알고 싶다면 아래를 참고하세요
참조:https://www.baeldung.com/java-stack-heap
참조:https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99#%ED%9E%99_%EA%B3%BC_%EC%8A%A4%ED%83%9D_%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9D%98_%EC%B0%A8%EC%9D%B4%EC%A0%90
'JAVA' 카테고리의 다른 글
[java] 반복문 for 2 (0) | 2024.08.12 |
---|---|
[java] 반복문(for,while),등차∙피보나치∙등비 수열의 합 (0) | 2024.08.12 |
[java]출생년도, 12간지 , 날짜 출력하기,DateTimeFormater (0) | 2024.08.10 |
[java]가위바위보 게임 만들기(java programming),switch,random (0) | 2024.08.10 |
[java]성적 처리 프로그램 (Scanner사용) (0) | 2024.08.10 |