-
자바성능향상팁
01. 데이터 필드(인스턴스/클래스 변수)를 조작하기 위해 임시 로컬 변수를 사용한다.
02. 인스턴스 변수를 한번 이상 초기화 하지 마라
03. 되도록 상속 깊이를 싶지 않도록 유지한다.
04. 객체 생성에 부하를 분산 분산시키려면 늦은 초기화(lazy initialization)을 사용한다.
05. 많은 객체가 필요하다면 되도록 애플리케이션 초기에 객체를 만들어둔다.
06. Read-Only 와 단일 쓰레드일 경우 동기화 사용을 피한다.
07. Enumerator 는 Iterator 보다 훨씬 빠르다.
08. Iterator.hasNext() 와 Enumerator.hasMoreElements()는 Collection 크기가 결정되어 있다면 반복적으로 호출할 필요가 없다. 대신에 collection.size() 와 loop counter를 사용한다.
09. int 형은 가장 빠른 데이터 타입
10. 컴파일러 최적화 (?g:none)
11. System.arraycopy()를 사용한다.
12. 코드 블록을 동기화 할 때 약간 빠르다면 메소드 전체를 동기화 한다.
13. 필요한 곳에만 예외를 사용한다.
14. private, static 메소드, final 클래스를 사용하라 컴파일러가 inlinng을 좀더 잘 할 수 있다.
15. 설계 시 성능을 고려한다.
16. 필드 사용시 한번만 할당하면 되는 정적 필드를 사용하라
17. final 클래스는 일반 클래스보다 빠르다.
18. ==가 equal()보다 빠르다.
19. 문자를 처리할 때에는 String 을 char[]로 변경한다.
20. ArrayList가 Vector보다 빠르다.
21. LinkedList는 배열 앞에 객체를 삽입할 때 ArrayList보다 빠르다. 그러나 indexed lookup은 느리다.
22. 더 이상 사용하지 않는 객체는 null로 한다.
23. 필요할때 메모리를 재사용하려면 SoftReferences를 사용한다.
24. File.length()는 시스템 호출을 하므로 느리다.
25. 비슷한 loop 기리 묶어라
26. 상수 비교를 loop 밖으로 옮긴다.
27. loop 안에서는 지역 변수만 사용하도록 한다. loop전에 클래스 필드를 지역 필드로 할당한다.
28. loop 안에서 객체 할당을 하지 마라(readLine()이 대표적인 예)
29. 테스트 기간 동안은 ?verbosegc
30. 가능한한 간단한 테스트 케이스를 작성한다.
31. 되도록 거꾸로 loop를 돌린다.
32. Vector는 사용하기 쉽지만 성능이 떨어진다. 특히 loop 내에서 elementAt()을 사용하지 않는다.
33. StringTokenizer는 매우 비효율적이다.
34. StringBuffer 는 최초 생성시 최대 크기를 미리 지정한다.
'prev > JAVA' 카테고리의 다른 글
2003년 자바수업 과제로 만든 애플릿 게임 (0) 2007.01.05 자바 언어 프로그래밍 지침 (구현편) From Thinking In Java (0) 2007.01.05 자바 언어 프로그래밍 지침 (설계편) From Thinking In Java (0) 2007.01.05 &&와 & (0) 2006.12.14 윤년계산 (0) 2006.11.29