1. Dynamic binding 은 Static binding 보다 느리다.
- 자바에서 특히 그러하다. c에서는 함수의 주소를 직접 가리켜 호출하지만
자바는 문자열을 파싱하여 메소드의 실행 위치를 알아내어 훨씬 느리다.
가능하다면 메소드 오버라이딩을 줄이고 간단한 메소드는 inline을 이요하고 final을 활용
2. 가급적 클래스 변수보다 stack 변수를 사용하라.
- 클래스 변수는 접근할 때 stack 변수보다 훨씬 우회하여 접근하므로 stack 변수보다 느리다.
3. 클래스를 통합하라.
- 클래스의 생성시 오버헤드가 크므로 작은 여러개의 클래스들의 생성보다 큰 클래스 하나의 생성이
가볍다. 또한 ZIP/JAR로 묶어서 배포하는것이 빠르다. 매번 디스크를 엑세스 하지 않고
한번에 로딩하기 때문이다. 이때 비압축 ZIP/JAR로 하는것이 더 빠르다.
4. Accessor(접근자) 메소드도 오버헤드가 존재한다.
- get, set 메소드는 OOP 캡슐화의 필수 요소이다. 하지만 멤버를 곧바로 변경하는 것이
훨씬 빠르다. 하지만 권장은 하지 않는다.
5. JVM은 배열 사용시 범위를 확인하기 때문에 순환문 내에서 배열을 이용하는 것은 성능이
떨어진다.
- 순환문 바깥에서 임시변수에 값을 대입한뒤 순환문 내에서 이 값을 사용하고 순환문 밖에서 다시 배열로
대입하는것이 두배 가량 빠르다.
6. 정수의 크기를 비교할때는 0과 비교하는 것이 가장 빠르다.
- for(int i=1; i<100; i++) 보다 for(i = 99; i>0; i--)가 더 빠르다.
7. 순환문 종료 조건에서 메소드 호출은 피한다. for(int i=1; i<collection.size(); i++)
- 종료조건을 미리 계산한뒤 값으로 비교하는것이 빠르다.
8. 순환문 내에서는 int가 가장 빠르다. JVM은 int에 최적화 되어있다.
- byte, char, short 를 int로 캐스팅 하여 사용
9. x = x+5 보다 x += 5가 빠르다.
- 앞의 방법은 내부적으로 변수값을 복사해 사용한다. 또한 비트 연산이 일반 연산보다 빠르다.
10. Casting을 피할수 있는 특정 데이터타입 클래스가 범용 클래스 보다 빠르다.
- Long을 저장하기 위한 List 보다 LongList 를 따로 만드는 것이 빠르다.
'IT_Programming > Java' 카테고리의 다른 글
DB 관련된 한글 처리 방법 (0) | 2008.09.08 |
---|---|
jpg, gif 파일의 크기 구하는 방법 (0) | 2008.09.07 |
JAVA Tip & Tuning Technic (0) | 2008.09.07 |
[펌] Annotation (주석) (0) | 2008.08.28 |
자바 컴파일러 들여다보기 (0) | 2008.08.23 |