본문 바로가기
JAVA

자바기본개념 - 자바가상머신 및 가비지 컬랙션

by khds 2021. 10. 22.

 

이 글은 자바 프로그래밍 면접 이렇게 준비한다(노엘 마크엄) 및 여러 블로그들을 참고하며 간단한 부분들만 정리한 글이다. 

 

자바 가상머신(JVM)은 프로그램이 실행되는 플랫폼이다. 플랫폼은 여러가지 기능을 제공해주는 실행환경이다. 자바 컴파일러는 .java파일을 .class 라는 Java Byte Code로 컴파일한다. 이 바이트코드는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이때 JVM은 OS에 맞게 해석해 주는 역할을 한다. 

여기서 다른 컴파일 언어와의 차이점은 JVM은 운영체제와 애플리케이션 사이에 위치하면서 애플리케이션이 플랫폼에 상관없이 독립적으로 실행될 수 있도록 만들어 준다. 즉, OS에 상관없이 실행한다는 것이다. 

JVM은 모든 중요한 애플리케이션 개발에서는 애플리케이션이 JVM과 어떻게 상호작용을 하는지, 다양한 조건에서 어떻게 작동하는지 테스트하고 확인해야 한다. 그만큼 여러군데서 JVM과 상호작용을 할 수 있다는 것이다. 

 

예를들면 메모리는 스택과 힙 두 영역으로 구분된다. 스택은 기본값, 객체의 참조, 메서드가 저장되는 위치이다. 그렇기에 스택의 생애주기는 for, while 등 코드의 scope에 영향을 받는다. 메서드를 호출했을 때 선언된 변수들은 스택의 상단에 위치한다. 만약 재귀함수를 실행할 때 잘못해서 너무많이 호출한다면 스택 메모리 영역이 가득 차게되서 out-of-memory(메모리 부족)이 발생할 수 있다. 이를 StackOverFlowError이라고 한다.

for문같은 반복문은 내부에 변수를 선언해도 그 선언된 변수만큼의 공간만 있으면 된다. 그렇기에 for문을 무한번 실행해도 그 내부에 있는 것들만 스택에 쌓일 것이다.

JVM은 각각의 메모리 영역에 할당된 메모리의 크기를 지정할 수 있는 커맨드라인 매개변수를 제공한다.

 

 

▼ 가비지 컬렉션(GC)

가비지 컬렉션은 기본에 할당된 메모리를 재사용하는 메커니즘으로, 나중에 메모리를 할당할 때 재사용할 수 있다.

C나 C++에서 malloc로 메모리를 할당하면 항상 free로 해제를 해줘야했었다. 하지만 자바나 C#같은 언어에서는 효율을 높이기 위해 메모리를 자동으로 관리하는 시스템이 있다. 자바에서는 이 시스템이 가비지 시스템이다. 사용되지 않는 할당된 메모리 블록을 찾아서 이를 다시 사용할 수 있도록 하는 것이다.

가비지 컬렉션에 자세한 동작방식을 확인하고자 한다면 https://velog.io/@litien/%EA%B0%80%EB%B9%84%EC%A7%80%EC%BB%AC%EB%A0%89%ED%84%B0GC 를 참고하길 바란다. 

 

 

 

 

 

참고 

 

자바 프로그래밍 면접 이렇게 준비했다 - 노엘 마크엄

 

https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2

 

JVM 이란?

# JIT

medium.com

https://velog.io/@litien/%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%A0%89%ED%84%B0GC

 

가비지 컬렉터(GC)에 대하여

얼마 전 N사 전화면접에서 GC에 대한 질문을 받고 그대로 얼어버린 경험이 있다. GC에대해 들어본 적은 있으나 동작원리나 관련 내용들을 제대로 몰라 할 수 있는 말이 없었다. 그래서 이번 포스

velog.io

https://d2.naver.com/helloworld/37111

https://itprogramming119.tistory.com/entry/%EB%A9%B4%EC%A0%91-JAVA-JSP-%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%98%88%EC%83%81-%EC%A7%88%EB%AC%B8-2%ED%83%84

 

[기술면접] 웹개발자 기술 면접 문제 2탄

1. Static의 의미 - 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미 - 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재(객체와 무관한 키워드)

itprogramming119.tistory.com