Java/JVM (5) 썸네일형 리스트형 Garbage Collection 출처 : d2.naver.com/helloworld/1329 가비지 컬렉션 과정 GC 를 알기 전 stop-the-world 를 알아보자 stop-the-world 란 GC 를 실행하기 위해 JVM이 어플리케이션을 멈추는 것이다. stop-the-world 가 발생하면 GC 실행 스레드를 제외하고 모든 스레드가 작업을 멈춘다. GC가 완료된 후에 다시 시작한다. 대개의 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다. 자바는 개발자가 코드로 메모리를 명시적으로 해제하지 않기 때문에, 가비지 컬렉터가 알아서 객체를 찾아 지운다. HotSpot VM 에서는 크게 2가지로 물리적 공간을 나눴다. Young 영역과 Old 영역이다. Young 영역: 새롭게 생성된 객체는 대부분 여기에 위치. .. Stack - 메모리 관리 Stack 에는 힙 영역에 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당된다. 또한 primitive 타입의 데이터들도 할당된다. 이 primitive 타입 데이터들에는 참조값이 아닌 실제 값을 저장한다. Stack 메모리는 스레드 하나당 하나씩 할당이 되고 다른 스레드에선 접근할 수 없다. 이 Stack 이 어떻게 활용되는지 봐보자 argument 변수가 있다 argument 에 새로운 메소드를 호출해서 값을 return 받는다 생각해보자 함수 내부에서 param 변수에 argument 를 저장하고 이 변수에 4를 곱한 변수를 tmp에 저장한다. 그 후 2를 나눈 값을 return 하면 저렇게 메소드에서 발생하는 부분이 새로 프레임으로 생성이되고 저 부분에서 이전 메소드의 매개변수은 argume.. JVM 과 JIT 컴파일러 컴파일러로 java 파일이 class(바이트코드) 파일로 변경 되는 걸 봤다. 그리고 이 class 파일은 JVM 에서 읽을 수 있다. 간단하게 보면, JDK 내부에는 컴파일러, 의존관계 분석 등 개발에 필요한 도구들이 있고, 이 JDK 가 class 파일을 만들게 되면 JRE 에는 실행에 필요한 자바 실행 명령, 클래스 로더와 바이트 코드 실행에 필요한 여러 라이브러리를 제공하고 있다. 이걸 이용해 바이트 코드를 실행하게 되면 JVM 에서 실행을 하게 된다. JVM 은 OS 에 독립적이여서 바이트 코드를 OS 에 맞추고 ,언어를 OS 에 맞게 변경하는데 이떄 사용하는게 인터프리터와 JIT 라고 보면 된다. 이제 이 바이트 코드를 어떻게 실행하는지 알아보기 위해 JVM 과 JIT 에 대해 알아보자 JVM.. 컴파일러 Java 는 jvm 에서 class 파일을 읽기전에 java 파일을 class 파일로 변경해주는 컴파일러 과정을 진행한다. 이 컴파일러가 어떻게 동작하는지 봐보자 컴파일러 동작 자바 컴파일러는 총 4가지 정도의 과정을 진행한다. 어휘 분석 구문 분석 의미 분석 중간 코드 생성 어휘 분석 .java 코드는 키워드와 리터럴, 오퍼레이터 등으로 구성이 되어있는데, 여기서 키워드는 public, class 등 예약어 들이고, 리터럴은 문자열 등, 그리고 오퍼레이터는 + - 같은 연산자 들로 구성된다. 이런 것들을 어휘소라고 하는데 이걸 모두 수집해 하나의 스트림으로 만들면 이게 토큰 스트림이 된다. 구문 분석 구문 분석은 이 토큰 스트림을 문법에 맞는지 확인을 하는 과정이다. 문법이 틀리면 Syntax erro.. JVM 이란? JVM JVM 은 java 컴파일러에 의해 .class 파일 형태의 바이트 코드로 변환된 파일을 OS에 맞게 해석 해주는 역할을 합니다. - 자바 프로그램이 플랫폼 독립성을 갖게 해준다 바이트 코드는 기계어가 아니기 때문에 컴퓨터가 바로 읽을 수 없는데 이때 JVM 이 운영체제가 바이트 코드를 읽을 수 있도록 해석 해준다. 하지만 JVM의 해석을 거치기 때문에 c언어 같은 네이티브 언어에비해 속도가 느렸지만 JIT(Just In Time)컴파일러를 구현해 이점을 극복 JIT Just In Time 컴파일 방식 c언어 같은 네이티브 언어에서 하는 것처럼 프로그램을 실행하기 전에 처음 한 번 컴파일 하는 대신 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일 하는 방식 JIT 컴파일러는 같은 코드를.. 이전 1 다음