Computer Science/JAVA

    JVM, GC 알아보자 3

    JAVA에서 GC 도입이 가능했던이유 Weak generational hypothesis 가설 - 대부분의 객체는 금방 접근 불가능 상태가 된다. - 오래된 객체에서 최신의 객체로의 참조는 아주 적게 존재한다. GC의 종류 JVM 버전이 올라가며 다양한 GC 방식이 도입되었다. Serial GC Mark-Sweep-Compaction 알고리즘을 생각하면된다. 순차적으로 사용되지 않는 객체를 식별하여 지우고 압축 과정을 거친다. 디스크 조각모음처럼 동작한다고 생각하면된다. 싱글 스레드만 사용하는 GC Parallel GC Serial GC의 멀티 쓰레드 방식으로 멀티쓰레드를 사용함으로 성능이 향상되어 STW(Stop-the-world)가 줄어든다. Parallel Old GC Parallel GC를 업그레..

    JVM, GC 살펴보자 2

    JVM의 Runtime Data Area의 Heap 영역에 대해 알아보자 Heap 영역은 new 연산자로 생성되는 인스턴스, 배열 등을 저장하는 영역으로 GC가 주 타겟으로 삼는 영역이다. | Eden | S0 | S1 | Old | Permanent | Young Generation Eden 영역 생성된 객체가 처음 위치하는 영역으로 Eden 영역에서 GC가 발생한 뒤에도 장기적으로 살아남은 객체들은 S0로 이동된다. Eden영역이 가득차면 Minor GC가 발생한다. Survivor0, Survivor1 영역 Eden영역에서의 활동과 마찬가지로 MinorGC 발생시 S0영역에서 살아남은 객체들은 S1으로 이동된다. Old / Tenured Generation Old 영역 S0, S1 영역을 오가는 동..

    SOLID 5원칙 (좋은 객체지향 설계란.)

    CleanCode의 저자 로버트 마틴이 소개한 좋은 객체지향 설계의 5가지 원칙 SRP (Single responsibilty priciple) 단일 책임 원칙 - 하나의 클래스는 한가지 기능만 - 응집도는 높히고 결합도를 낮춰야한다. - 코드 변경 시 파급효과가 작도록 설계해야 한다. OCP (Open/close principle) 개방/폐쇄 원칙 - 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. - 추상화와 다형성 - 기존 구성요소는 변하지 않고 쉽게 확장이 가능한 설계를 해야한다. - 역할과 구현을 분리하자 LSP (Liskov subsitution priciple) 리스코프 치환 원칙 - 다형성에서 하위 클래스는 인터페이스 규약을 지켜야한다. - 프로그램의 정확성을 깨뜨리지 않고 하위 타입의 ..

    JVM, GC 살펴보자 1

    웹 개발자 기술 면접의 단골 문제 중 하나인 JVM, GC에 대해서 살펴보자. 해당 회사가 JAVA 기반이라면 높은 확률로 물어본다. 경력의 경우는 별로 중요해보이지 않지만 신입 면접에 경우 필자도 JVM GC 설명을 해보세요 하는 질문을 받아봤고 많은 사람들이 받아본 문제 중 하나다. JVM 자바 버츄얼 머신의 약자로 자바로 만든 프로그램을 읽어들여 실행하는 것이다. OS와 JAVA 사이의 중간 역할을 하는 것으로 이로 인해 JAVA는 JVM만 실행가능하다면 OS와 상관없이 동작할 수 있다. JVM은 메모리 관리를 자동으로 해주는데 이것을 Garbage Collection(GC)라고 한다. (C와 다르게 메모리를 개발자가 관리하지 않아도 된다.) JVM의 구성 요소 Class Loader JVM으로 클..