[JAVA] JVM 프로그램의 메모리 영역[JAVA] JVM 프로그램의 메모리 영역

Posted at 2020. 4. 27. 20:19 | Posted in JAVA
반응형




출처 : Do it! 코틀린 프로그래밍




프로그램이 사용하는 메모리 영역에는 여러가지가 있다.


명령어가 들어가는 코드 영역과,


프로그램이 컴파일되면 문자열이나 정적 변수나 문자열 등이 들어가는 정적 메모리 영역인 데이터( Data ) 영역이 존재한다.


JVM에서는 이 영역을 메서드 정적 영역( Method Static Area )으로도 부룬다.


또 실행중 생성되는 객체는 동적 메모리 영역인 힙( Heap ) 이라고 불리는 곳에서 만들어 진다.




추가적으로 코드 블록인 중괄호( { } ) 안에 사용한 변수나 함수 호출 블록은 임시로 쓰이는 메모리 영역인 스택( Stack )에 들어가며,


중괄호 블록이 끝나면 임시로 사용한 변수는 스택에 제거된다.



 

데이터 영역은 정해져 있어서 실행중에 오류가 날 가능성은 적다.


힙과 스택은 프로그램이 동작하는 도중에 위 그림의 화살표 방향으로 채워지기 때문에 너무 많은 메모리를 할당하는 객체가 있다면


Out of Memory 오류가 날 수 있고, 함수 호출이 재귀적으로 너무 많이 일어나면


Stack Overflow 오류가 발생할 수 있다.










JVM을 사용하는 프로그램에는 동적 메모리 영역의 객체가 사용된 뒤 아무 참조가 없으면 자동으로 삭제하는


GC( Garbase Collector )가 존재한다.


GC란 일종의 쓰레기 청소부 역할을 해서, 우리도 모르게 쓸모없는 객체를 치워 주는 일을 한다고 생각하면 된다.







반응형
//