전체 글128 Java의 GC(가비지 컬렉션) stop-the-world: GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 작업을 멈춘다. GC는 ‘week generational hypothesis’ 의 2가지 전제조건에 따라 만들어짐 대부분의 객체는 금방 unreachable한 상태가 된다 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다. 전제조건에 따라 오라클의 Hotspot JVM은 2가지 물리공간을 나눠 이용한다. Young/old 영역으로 나누는 방식을 Generational GC라고 함 Yong generation 영역. 새롭게 생성된 객체들은 이 곳에서 저장됬다가 금방 메모리 해제가 됨. minor GC가 발생한다고 한다 Old generation 영역. young 영역에서 오래 살아남으면 Old영역에 복사되고, 더 큰 메모리.. 2022. 10. 30. JIT 컴파일러 동작과정 자바코드를 자바 컴파일러가 컴파일하면 바이트코드(컴파일된 자바코드. JVM이 읽을 수 있는 코드)가 되는데 이를 실행하는 과정에서 인터프리터와 JIT 컴파일러를 실행하는 쓰레드가 같이 돌면서 바이너리 코드(OS들이 읽을 수 있는 바이너리코드)로 변환하게 된다. (바이트코드 실행시 interpreter와 JIT 컴파일러가 동시에 돌아감) JVM 내부의 실행엔진에 있는 인터프리터는 바이트코드 명령어를 하나씩 읽어서 해석하고 실행하는데, 하나하나 해석하면서 실행하기 때문에 느릴 수 있다. JIT 컴파일러는 native code 중에 반복되어 사용되는 코드나 기계어로 변환 시에 많은 리소스가 필요한 부분을 실시간으로 변환해서 기계어로 캐싱해두는 방식으로 최적화를 하기 때문에 인터프리터보다 실행 성능이 좋을 수 .. 2022. 10. 30. JVM 이란? JVM은 자바 가상머신이다.. JRE는 Java api와 JVM으로 구성되어 있고, 여기서 JVM은 자바 애플리케이션을 Class loader를 통해 읽어 자바 API와 함께 실행한다. 자바 바이트코드(.class 파일)를 각 OS별로 특화된 코드로 변환(인터프리터, JIT 컴파일러에서 수행함)하여 네이티브OS에 맞게 머신코드로 변환한 뒤 실행한다. 따라서 JVM은 특정 플랫폼에 종속적이라 할 수 있다. (각 OS별로 다른 JVM 버전이 존재함) 간략한 자바코드 실행순서: 자바코드 → 자바 컴파일러 → 바이트코드 → 인터프리터 or JIT컴파일러 → 바이너리코드 기술적인 정의로서의 JVM은 자바 코드를 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양이다. (다양한 버전의.. 2022. 10. 30. Java의 Call by value(Pass by value), Swap 구현 방식 4가지 C++에서의 swap() 유틸리티 함수는 주소값을 교환하는 call by reference 방식으로서 동작한다. tmp 변수를 중간 매개로 주소값(값의 위치)을 서로 교환한다. void swap(int &a, int &b) { int temp = a; a = b; b = temp; } Java에서 primitive type, reference type에 해당하는 값을 저장하는 방식에 차이가 있다. JVM 메모리에서 primitive type은 stack 영역에 저장된다 reference type은 그 객체인 값이 heap 영역에 저장되고, stack 영역에 있는 변수가 객체의 주소값을 가지고 있다. 만약 swap 메서드에서 reference 변수를 파라미터로 넘기게 되면 해당 객체를 가리키는 새로운 변수.. 2022. 10. 9. 이전 1 2 3 4 5 6 7 ··· 32 다음