관리 메뉴

공부한것들을 정리하는 블로그 입니다.

JVM에 대하여 정리 본문

JAVA/공부

JVM에 대하여 정리

호 두 2022. 4. 30. 11:47
반응형


JVM의 특징

1. 스택기반의 VM
2. OS와 JAVA 사이에서 중계자 역할을 함으로써, JAVA가 OS에 구애받지 않도록 함
3. 메모리관리, GC를 수행

자바 프로그램 실행 과정

1. 애플리케이션이 실행되면 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.

JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

2. 자바소스(.JAVA)를 자바 컴파일러(javac)가 자바 바이트코드(.CALSS)로 변환한다.
JVM에서 자바 바이트코드를 Class Loader를 통해 로딩한다.

3. JVM에서 자바 바이트코드에 대해 검증/재해석/바이너리 코드로 변경 작업을 수행한다.

4. 이후 런타임 과정에서의 수행과정
   1) 클래스들의 static  변수를 자동 초기화
   2) static 블록 수행
   3) 인스턴스 블록 수행
   4) 생성자 호출
   5) main 함수 호출

 

 

더 생각해볼 만한 것들

 - GC에 대하여 정리

 - 런타임에서 main함수 호출 이후에도 클래스에서 메소드의 실행순서 관리 (ex)Tmax사의 ProObject)

     - 스레드 / 힙 / 리소스 pool

 - 자바 트러블슈팅

 

 

생각정리

일전에 자바 트러블슈팅 도서가 리뉴얼되어 구매하여 읽은 적이 있다.

이후 장비노후로 인한 문제가 발생하였으나 아쉽게도 스레드/메모리릭 등으로 인한 문제가 아니여서(도서에서는 scouter 사용) 해당 책에서의 지식은 아직 실무에서 직접적으로 사용해 본 적이 없는 것 같다.

 

당연하게도 이번에 복기해본 JVM 역시 장비노후 경험보다는, 자바 트러블슈팅 책을 읽은 경험에 유사하다.

 

장애발생 상황을 재현할 수 있고 원인에 대한 로그가 남아있다면 시간이 오래 걸리더라도 해결이 가능하다. 가용한 데이터가 많고 경험이 풍부하면 시간을 단축시킬수도 있다. 그러나 실무에서 위의 조건들이 모두 충족된 상황을 경험하기란 매우 요원하다. 

 

트러블슈팅 관련 책이나 강의, 동영상 등에서는 이러한 어려움에 처한 이들을 위해 여러 가지 솔루션을 제시해주기 때문에 읽어둔다면 상황에 직면하였을때 큰 도움이 될 수 있을 것 같다.

 

자바 트러블슈팅(특히 WAS를 토대로 이야기를 전개해 나간다.) : https://drsggg.tistory.com/480

장비노후(결국 서버이관으로 해결했다) : https://drsggg.tistory.com/543

 

 

 

 

반응형
Comments