JVM과 메모리

메모리는 OS가 관리하는데, 모든 프로그램들은 OS위에서 돌아간다.
프로그램이 돌아가려면 메모리가 있어야된다.
JVM도 메모리가 필요하면 OS에게 메모리 요청을 한다.
그런데 OS가 처음부터 자기가 가진 메모리를 전부 다 줘버리면, 다른 프로그램들에게 줄 메모리가 없게 된다.
때문에 각 프로그램에게 메모리의 일정부분만 빌려주는 방식으로 관리가 된다.

JVM을 실행하다가 메모리가 부족하면 OS에게 메모리를 더 달라고 요청한다. 그러면 OS가 또 JVM에게 메모리를 더 빌려준다.
JVM은 OS로 부터 받은 메모리들 중, 어디에다가 저장할지 그 주소를 할당하야 한다.
이 때, JVM은 자기가 받은 메모리 안에서, 절대주소가 아니라 거기에 대한 상대주소를 할당한다. 이걸 offset주소라고 한다.

Garbage Collector

프로그램을 실행하다보면 가비지가 발생하게 된다.
가비지는 정리되지 않은 메모리, 유효하지 않은 메모리 주소를 말한다.
가비지 컬렉터는 메모리가 부족할 때 가비지를 정리해주는 프로그램을 말한다.
때문에 JVM의 가비지 컬렉터는 메모리를 다른 용도로 사용할 수 있게 ‘메모리 해제’를 시키는 프로그램이다.
참고로 가비지 컬렉터는 JVM이 OS에게 추가로 메모리를 더 요청할 때 실행된다.
또, 서버 프로그램인 경우에는 24시간 내내 돌아가는데, 이때에는 JVM이 한가할 때 가비지 컬렉터가 실행된다.