자바 성능 튜닝 이야기 Collection

자바 성능 튜닝 이야기 Collection

2022, May 15    

알아보게 된 이유.

자바 성능 튜닝 이야기라는 책을 읽으며 자바의 성능을 올릴 수 있는 이야기들을 정리해보고 자 한다.

Collection

Collection : 가장 상위 인터페이스 Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스. SortedSet : 오름차순을 갖는 Set 인터페이스. List : 순서가 있는 집합을 처리하기 위한 인터페이스 , 인덱스가 있어 위치를 찾을 수 있다. Queue : 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스. Map : Map은 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스. SortedMap : 키를 오름차순으로 정렬하는 Map 인터페이스.

[Set 인터페이스를 구현한 클래스]

HashSet, TreeSet, LinkedHashSet 세가지가 있다.

HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장된다.

TreeSet : red-black 이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다. 데이터를 담으면서 동시에 정렬을 하기 때문에 HashSet보다 성능상 느리다.

[List 인터페스를 구현한 클래스]

Vactor : 객체 생성시에 크기를 지정할 필요가 없는 배열 클래스이다.

ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않다.

LinkedList : ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행한다.

Map은 Key와 Value의 쌍으로 저장되는 구조체이다.

[Map 인터페이스를 구현한 클래스]

HashMap, TreeMap, LinkeHashMap

Hashtable : 데이터를 해쉬 테이블에 담는 클래스이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이 클래스를 사용.

HashMap : 데이터를 해쉬 테이블에 담는 클래스이다. Hashtable 클래스와 다른 점은 null 값을 허용한다는 것과 동기화되어 있지 않다는 것.

TreeMap : red-black 트리에 데이터를 담는다. TreeSet과 다른 점은 키에 의해서 순서가 정해진 것이다.

LinkedHashMap : HashMap과 거의 동일하며 이중연결리스트 라는 방식을 사용하여 데이터를 담는다는 점만 다름.

Set 클래스 중 가장 빠른건?

1000개의 데이터를 순차적으로 넣는 평균 응답 시간(마이크로초)

  • HashSet : 375
  • TreeSet : 1249
  • LinkedHashSet : 378

데이터를 읽을 때 평균 응답 시간(마이크로초)

  • HashSet : 26
  • TreeSet : 35
  • LinkedHashSet : 16

랜덤하게 데이터를 읽을 때 평균 응답 시간(마이크로초)

  • HashSet : 32
  • TreeSet : 841
  • LinkedHashSet : 32

데이터를 순서에 따라 탐색하는 작업이 필요 할 때는 TreeSet을 사용하는 것이 좋다. 하지만, 그럴 필요가 없을 때는 HashSet이나 LinkedHashSet을 사용하는 것을 권장한다.

List 클래스 중 가장 빠른건?

1000개의 데이터를 순차적으로 넣는 평균 응답 시간(마이크로초)

  • ArrayList : 28
  • Vector : 31
  • LinkedList : 40

데이터를 읽을 때 평균 응답 시간(마이크로초)

  • ArrayList : 4
  • Vector : 105
  • LinkedList : 1512

ArrayList의 속도가 가장 빠르고, Vector와 LinkedList는 속도가 매우 느리다. LinkedList가 터무니 없이 느리게 나온 이유는 Queue 인터페이스를 상속받기 때문이다. LinkedList 클래스를 사용 할 때에는 get() 메서드가 아닌 peek()이나 poll()메서드를 사용해야한다.

Map 클래스 중 가장 빠른건?

HashMap, TreeMap, LinkeHashMap 의 데이터 추가 작업의 속도는 비슷하다. get()메서드를 사용하여 데이터를 꺼내는 시간 비교.

대부분의 클래스들이 동일하지만 Tree 형태로 처리하는 TreeMap 클래스가 가장느리다.

  • Set : HashSet
  • List : ArrayList
  • Map : HashMap
  • Queue : LinkedList