gc: 6개의 글
기본동작 1) Minor GC - 모든 어플리케이션 스레드를 멈춤 2) 동시 병렬 컬렉션 - Full GC 가 발생하지 않도록 백그라운드에서 GC 3) Full GC - 어쩔수 없는 경우 Full GC CMS Collector Minor GC 동작 과정 요약 - Throughput Collector 와 동일 CMS Collector Minor GC Log CMS Collector 동시 병렬 컬렉션 동작 과정 요약 CMS Collector 동시 병렬 컬렉션 GC Log Step 1. Initial Mark - 모든 어플리케이션 스레드가 멈춘다(Stop-the-world) Step 2. Mark - 어플리케이션 스레드를 멈추지 않는다(동시 병렬 실행) - 아무런 정보가 없다. 단지 표시만 하는 단계 Step..
Throughput Collector Minor GC 동작 과정 요약 Throughput Collector Minor GC Throughput Collector Minor GC Log PrintGCDetails 플래그를 활성화 시켜서 발생한 Minor GC 로그를 보면 다음과 같다 Throughput Collector Full GC 동작 과정 요약 Throughput Collector Full GC Log [출처] [JVM] Throughput Collector - GC Log
4개의 GC 알고리즘에 공통적으로 적용되는 기본적인 튜닝 방법에 대해 알아보자 Heap Size 힙이 너무 작다면 너무 자주 GC가 일어날 것이고, 힙이 너무 크다면 중단은 줄어들지만 Full GC가 발생했을 때 중단 시간이 너무 길어진다. OS 메모리와 힙 사이즈 힙 사이즈는 [물리적 RAM - (OS에서 사용하는 RAM)] 보다 작게! OS는 스와핑, Paging을 통해 메모리를 가상화시켜서 관리한다. 예를들어 OS는 실제로 PC의 RAM은 8GB이지만 가상화를 통해 16GB로 보이도록 제공한다. 이때, 실제로 물리적인 RAM은 8GB이기 때문에, 나머지 8GB를 디스크에서 가져와서 사용한다. 이 과정은 사용자에게는 투명하지만 내부적으로 디스크에 있는 데이터에 접근할때마다 느려질 것이다. 힙 크기를 ..
1. GC (Garbage Collection) GC란 간략히 정의 하자면 Heap 메모리를 재활용 하기 위해 Root Set에서 참조 되지 않는 Object(Unreachable Object)들을 해제해 가용한 공간을 만드는 작업을 의미 합니다. Java에서 이런 메모리 해제 작업을 Garbage Collector가 담당하며, 메모리 해제하는 작업을 Garbage Collection이라고 합니다. java8의 은 아래 와 같이 메모리를 관리 합니다. (Java8에서는 기존의 Permanent Generation 이 Metaspace로 대체 됩니다.) Heap 은 Young Generation과 Old Generation 나뉩니다. Young Generation은 Eden, Survivor space 0..
참조문서 https://www.html5rocks.com/ko/tutorials/speed/v8/ https://github.com/v8/v8/wiki 자바스크립트 엔진은 javascript로 작성된 코드를 해석하고 실행하는 인터프리터다. js엔진은 브라우저 벤더별로 다양하다. Mozilla의 Monkey시리즈, 자바의 바이트코드로 컴파일해주는 Rhino, 구글 크롬의 V8, Safari의 JavascriptCore, Explorer의 Chakra 등이 있다. 여기서 nodejs는 구글의 V8 JavaScript 엔진을 기반으로 동작한다. 우리가 자주쓰는 크롬브라우저도 V8엔진을 쓴다. 성능좋은 코드를 위해 V8을 알아보자 1. Hidden Class로 빠른 프로퍼티 접근과 정적 룩업 다른 JavaScr..
1. JVM(Java Virtual Machine)이란? jvm은 java를 운영체제로부터 독립적으로 실행시켜주는 핵심이자 원리이다. 예를들어 C언어의 경우 소켓프로그램을 윈도우에서 짜면, 리눅스에서는 같은 코드로 돌아가지 않는다. 컴파일조차 실패할거다. 헤더파일도 다르고 함수명도 전부 다르니ㅋㅋ 그렇지만 java는 소켓프로그램짜두면 윈도우든 리눅스든 맥이던 플랫폼에 상관없이 돌아간다. 2. JVM 구성요소 JVM은 위 그림처럼 4가지 구성 요소를 가지고 있다. 3. Class Loader .java 파일을 javac로 컴파일하면 바이트코드(.class)가 나온다. 이 파일을 컴파일 타임이 아닌 런타임에(동적으로) 메모리로 올려서 실행하는 부분이 Class Loader이다. ※ Class Loader에 ..