2020/04(34)
-
리팩토링 2판 - 01
기능 이동 좋은 소프트웨어 설계의 핵심은 모듈화 얼마나 잘 되어 있는지다. 객체 지향 프로그래밍의 핵심 모듈화 컨텍스트는 클래스다. 모듈성이란 프로그램 어딘가를 수정하려 할 때 해당 기능의 작은 일부만 이해해도 가능하게 해주는 능력이다. 프로그램 상당 부분이 동작을 구현하는 코드로 이뤄지지만 프로그램의 진짜 힘은 데이터 구조에서 나온다. 관련된 코드들은 가까이 모여있으면 좋다. 관련된 코드가 모여있다면 함수 추출이 쉬워진다. 필드와 함수가 적절한 위치에 있는 것이 좋다. 하지만 추상화 라는 것은 일반적으로 그 경계를 긋기가 힘들다. 그래서 코드 베이스의 기능범위가 달라지면 추상화의 경계가 움직인다. 함수 관점에서 생각해보면 초기에는 응집도가 높고 한가지 일만 수행하던 함수가 어느새 둘 이상의 다른 일을 ..
2020.04.30 -
리팩토링 2판 - 00
다음 책을 읽고 정리합니다. http://www.yes24.com/Product/Goods/89649360?scode=032&OzSrank=1 리팩터링 2판 개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 『리팩토링』은, 기존 코드의 디자인을 개선하고 소프트웨어 유지 관리 능력을 향상시켰으며 기존 코드를 이해하기 쉽게 만드는 데 도움을 주었다. 간절히 ... www.yes24.com 리팩토링 전통적인 소프트웨어 개발 방법에서는 완벽한 설계를 만들고 코드를 짜려하였다. 그러나 완벽한 설계라는 것은 존재하지 않는다. 시간이 흐르면서 코드는 수정되고 시스템의 무결성은 망가진다. 또한 구조도 엉망..
2020.04.27 -
GC
GC 자바에서는 메모리를 GC 알고리즘을 통해서 관리한다. 따라서 개발자가 메모리 처리 로직을 만들 필요도 없고 만들어서도 안된다. GC 는 런타임 데이터 영역중 Heap 영역이 대상이 된다. GC 가 제대로 동작하지 않으면 메모리가 가득차서 JVM Hang 이 걸리거나 메모리를 추가할당 받게된다. 메모리를 계속 추가 할당 받다가 넘치게되면 OutOfMemory 로 JVM 이 다운될 수 도 있다. GC 가 발생하거나 객체가 이동할 때마다 어플리케이션에 병목이 발생하고 성능에 영향을 준다. JVM 에서는 이를 관리하기 위해 스레드 로컬 할당 버퍼라는 것을 이용한다. 이는 스레드 별로 메모리 버퍼를 사용하여 다른 스레드에 영향을 주지 않는 메모리 할당 작업을 가능하게한다. GC 의 목표 메모리 할당 사용중인..
2020.04.25 -
JVM 의 실행, 종료, 클래스 로더, 아키텍쳐
JVM 실행 절차 Java 실행 옵션을 파싱한다. 힙크기를 할당한다. JIT 컴파일러 타입을 지정한다. 환경변수를 지정한다. (CLASSPATH, LD_LIBRARY_PATH) Main 클래스를 확인한다. HotSpot VM 을 생성한다. JNI_CreateJavaVM 가 HotSpot VM을 생성된다. JNI_CreateJavaVM 는 동시 호출이 불가능하다. JNI_CreateJavaVM 가 non_primordial 스레드에서 HotSpot VM을 생성한다. JNI 호환성을 점검한다. GC 준비를 한다. 각종 초기화를 한다. OS 모듈을 초기화한다. (Pid, 랜덤 시드) 커맨드 라인 변수를 파싱한다. 표준 자바 시스템 속성을 초기화된다. 동기화, 메모리같은 모듈이 초기화된다. libjava 같은 ..
2020.04.23 -
JIT 컴파일러
HotSpot VM 자바를 만든 Sun 에서는 자바의 성능 개선을 하던 도중 JIT 컴파일러를 개발한다. 그리고 이 이름을 HotSpot 이라고 짓는다. JIT 컴파일러는 아래에서 설명하겠지만, JVM 환경에서는 javac 가 컴파일한 바이트 코드를 읽고 실행하는 인터프리터가 존재한다. 이 때 인터프리터가 자주 수행되는 영역이 있다 하면 이를 hot code 영역이라고 부른다. JIT 컴파일러는 hot code 영역을 효율적으로 다루기 위해 만들어진 기능이다. 이렇게 HotSpot(JIT 컴파일러)이 탑재된 VM 은 자바 3 부터 기본 VM 으로 사용되어 왔다. HotSpot VM 에는 주요 3가지 컴포넌트가 존재한다. JIT 컴파일러 VM 런타임 메모리 관리자 번외) HotSpot VM 에는 OSR 컴..
2020.04.22 -
자바 성능 튜닝 이야기 - 01
안드로이드의 DalvikVM 안드로이드는 오라클, IBM 이 개발한 JVM 을 사용하지 않고 Dalvik VM 을 사용한다. 즉 가상 머신이 다르기 때문에 Dalvik VM 의 특징을 이해해야한다. 물리적인 RAM 이 부족할 경우 디스크를 메모리 처럼 사용할 수 있는 SWAP 을 제공하지 않는다. 구글에서 말하는 안드로이드의 성능 개선 필요없는 객체 생성을 피하라 인스턴스 변수를 접근할 일이 없으면 Static 메소드를 사용하라. 인스턴스 변수를 접근할 일이 생기면 getter/setter 를 사용하여 접근하지마라 상수는 static final 로 지정하면 접근 속도가 빨라진다. For-each 문을 써라. 단 ArrayList 는 전통적인 for 문이 더 빠르다. Private inner 클래스의 pr..
2020.04.22