Java와 Spring의 철학 — 읽기 자료
.java 가 컴파일되어 만들어지는 OS 와 무관한 중간 형태..class 파일을 JVM 메모리에 적재하는 부품.같은 자바 프로그램이 윈도우에서도 맥에서도 리눅스에서도 똑같이 돕니다. OS 가 다 다른데 어떻게 가능할까요?
자바 코드가 「어디서·어떻게」 실행되는지 모르면, 메모리 부족(OutOfMemoryError) 같은 오류를 만났을 때 무엇을 의심해야 하는지 가닥을 못 잡습니다.
윈도우용 JVM, 맥용 JVM 이 각자 따로 있고, 자바 바이트 코드를 받아 자기 OS 의 명령어로 변환해 실행합니다.
javac 명령으로 변환. 사람이 짠 자바 코드 → 기계가 빠르게 처리할 수 있는 바이트 코드.
실행 시점에 필요한 .class 파일을 메모리에 적재. 「로드 → 검증 → 준비 → 분석 → 초기화」 5 단계로 진행.
더 이상 참조되지 않는 객체를 자동 회수. 개발자가 free() 같은 해제 코드를 쓸 필요 없음. C/C++ 와 가장 다른 점.
OutOfMemoryError 가 뜨면? GC 가 회수할 수 없을 만큼 객체 참조가 끊기지 않은 경우. 「누가 객체를 계속 들고 있나」를 의심.
자바 코드가 Tomcat 안에서 돈다는 정도만 안다.
그 자바 코드가 JVM 위에서 어떻게 변환·실행·청소되는지 그림을 안다.