Java 성능 튜닝 -4- 요약

객체 Casting

객체 타입 캐스팅은 컴파일 시점이 아닌 런타임 시점에 그 형이 결정되므로 불필요한 캐스팅은 수행시간을 느리게 한다.

Primitive Type

Primitive Type들의 Wrapper Class인 Integer, Double, Character 등등 사용을 자제한다. Java에서 유일한 8가지 Primitive Type이 존재하는 중 하나가 속도때문일수도…;;

I/O Buffering

Java의 Buffered* Class의 기본 버퍼 사이즈는 512 byte이며, 1MB 이하 크기의 스트림을 다룰 경우 오히려 버퍼의 초기화 작업으로 인해 성능이 하락할 수 있다. 스트림의 크기가 큰 경우에 적절한 버퍼링을 하는것이 바람직하다.

비 synchronized

다중 쓰레드 환경에서의 데이터 공유가 아니라면, 비 synchronized 클래스들을 이용한다. StringBuffer보다는 StringBuilder를.. Hashtable 대신 HashMap, Vector 대신 ArrayList… 등등…ㅋ

Strength Reduction

동일한 결과에 대한 좀 더 빠른 수식을 이용한다. 대표적으로 Shift 연산이 일반 *,/보다 훨씬 빠르며, ++, –이 +1, -1 연산보다 빠르다.

Code Refactoring

  • Common Sub-Expression Elimination: 불필요하거나 중복되는 수식은 제거.
  • Code Motion: 불변값의 연산은 반복 수행문의 외부로 이동.
  • Unrolling Loops: 추출가능한 공통적인 수식은 반복 수행문의 외부로 이동.
  • Design Pattern 적용: 성능은 떨어질 수 있으나 효율적인 객체지향적 코딩을 권장한다.

Static Method

객체 생성없이 static method로 접근 가능하여 원하는 결과를 얻을 수 있는 경우, static method 사용.

Quickly Variable Type

빠른 변수타입을 사용한다. 기본적으로 가장 액세스가 빠른 변수는 지역 변수이며 int, reference 타입의 변수가 빠르다.

Cache

GoF의 Fly-Weight 패턴과 같은 객체 재사용을 위한 다양한 패턴으로 설계하고 코딩하는 습관을 기른다.

Tags:

Updated:

Comments