JavaRush /Java Blog /Random-KO /커피 브레이크 #132. JDK의 최신 가비지 수집기인 ZGC를 살펴보겠습니다. Java에서 HashM...

커피 브레이크 #132. JDK의 최신 가비지 수집기인 ZGC를 살펴보겠습니다. Java에서 HashMap, LinkedHashMap 및 TreeMap의 차이점은 무엇입니까?

Random-KO 그룹에 게시되었습니다

JDK의 최신 가비지 수집기인 ZGC 소개

출처: Java 내부 ZGC 또는 Z Garbage Collector는 JDK에서 가장 현대적인 가비지 수집기입니다. 원래는 JDK 11에서 실험적인 기능으로 등장했습니다. ZGC는 JEP 377 향상이 승인된 후 JDK 15의 프로덕션 기능이 되었습니다. 이 기사에서는 ZGC의 목표와 미래를 살펴보겠습니다. 커피 브레이크 #132.  JDK의 최신 가비지 수집기인 ZGC를 살펴보겠습니다.  Java의 HashMap, LinkedHashMap 및 TreeMap의 차이점은 무엇입니까 - 1

ZGC 검토

ZGC는 확장 가능하고 대기 시간이 짧은 가비지 수집기로 설계되었습니다. ZGC 작업 중 최대 일시 중지 시간은 거의 250마이크로초를 초과하지 않습니다. 예, 정확히 마이크로초이며 평균 일시 중지 시간은 수십 마이크로초입니다. ZGC는 확장성이 뛰어나며 최소 힙 크기는 8MB에서 16TB까지입니다. 일시정지 시간은 힙 크기에 따라 증가하지 않는다는 점에 유의하는 것이 중요합니다. 따라서 힙 크기가 수 테라바이트에 달하는 경우에도 일시 중지 시간은 여전히 ​​마이크로초 단위로 측정됩니다. ZGC는 짧은 대기 시간과 높은 확장성을 제공하지만 처리량 비용은 G1에 비해 약 10% 낮습니다. 정확한 처리량 감소는 애플리케이션 디자인, 시스템 아키텍처 및 비즈니스 요구 사항에 따라 다릅니다.

ZGC 사용

G1은 JDK 9부터 기본 가비지 수집기이므로 ZGC를 사용하려면 VM 플래그 -XX:+UseZGC를 설정해야 합니다. ZGC를 사용할 때 가장 중요한 구성은 최대 힙 크기인 -Xmx를 설정하는 것입니다. 힙 크기는 애플리케이션의 라이브 세트를 처리할 수 있을 만큼 커야 합니다. 또한 가비지 수집을 수행하려면 추가 예약이 있어야 합니다. 힙에서 사용 가능한 공간이 많을수록 가비지 수집 빈도가 줄어듭니다. 그러나 이는 메모리 사용량과 균형을 이루어야 합니다.

ZGC의 추가 개발

JDK 15의 프로덕션 기능으로 출시된 이후 ZGC는 계속해서 활발하게 개발되었습니다. JDK 16이 출시되면서 스레드 스택 병렬 처리(JEP 376)가 도입되었으며 JDK 18에는 행 중복 제거 기능이 추가되었습니다. 앞으로는 ZGC가 다세대화될 예정이지만, 이 개선 사항을 구현하기 위한 구체적인 기간은 아직 정해지지 않았습니다.

ZDC에 대한 추가 정보

Java에서 HashMap, LinkedHashMap 및 TreeMap의 차이점은 무엇입니까?

출처: Rrtutors Java 프로그램에 키-값 쌍을 저장하려는 경우 Java 컬렉션은 필요에 따라 이에 대한 다양한 옵션을 제공합니다. 여기에는 LinkedHashmap , HashMapTreeMap이 포함됩니다 . 이 세 클래스의 주요 차이점은 내부 구현과 특정 경우의 특정 애플리케이션에 있습니다. 커피 브레이크 #132.  JDK의 최신 가비지 수집기인 ZGC를 살펴보겠습니다.  Java의 HashMap, LinkedHashMap 및 TreeMap의 차이점은 무엇입니까 - 2

Java에서 HashMap, LinkedHashMap 및 TreeMap의 차이점

구현, 순서, 정렬, Null 키 및 값 지원을 기반으로 언급된 세 가지 클래스 간의 주요 차이점은 다음과 같습니다.

구현

HashMapLinkedHashMap은 모두 Map 인터페이스를 구현하는 반면 TreeMap은 Map , NavigableMap 및 vSortedMap 인터페이스를 구현합니다 . LinkedHashMap은 이중 연결 목록 버킷으로 구현되고, HashMap은 해시 테이블로 구현되며, TreeMap 은 트리로 구현됩니다.

주문 및 정렬

  • HashMap은 반복 순서에 관해 어떠한 보장도 하지 않습니다. 그러나 새로운 요소가 추가되면 완전히 바뀔 수 있습니다.

  • LinkedHashMap은 항목이 맵에 배치된 순서대로 반복됩니다.

  • TreeMap은 CompareTo() 메서드 (또는 외부 Comparator) 에 따라 키의 "자연 순서"에 따라 반복합니다 . 또한 정렬 순서에 따라 달라지는 메서드가 포함된 SortedMap 인터페이스를 구현합니다.

Null 키 및 값

HashMapsLinkedHashMap은 키 값뿐만 아니라 null 값도 지원하는 반면, TreeMaps는 자연 요소 유형을 지원하므로 null 값을 지원하지 않습니다. 시각적 예시를 위해 HashMap , LinkedHashMapTreeMap 을 만들어 보겠습니다 .
import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.TreeMap;

public class HashMap_LinkedHashMap_TreeMap {

            public static void main(String[] args) {

                  Map Treemapu = new TreeMap();

                  Treemapu.put("First", "Java");

                  Treemapu.put("Second", "Python");

                  System.out.println("TreeMap values are: \n" + Treemapu);

                  Map Hashimapu = new HashMap();

                  Hashimapu.put("First", "Java");

                  Hashimapu.put("Second", "Python");

                  System.out.println("HashMap Values are: \n" + Hashimapu);

                  Map LinkedHashiMapu = new LinkedHashMap();

                  LinkedHashiMapu.put("First", "Java");

                  LinkedHashiMapu.put("Second", "Python");

                  System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);

            }

}
출력에서 우리는 다음을 얻습니다:
{First=Java, Second=Python} HashMap 값은 다음과 같습니다: {Second=Python, First=Java} LinkedHashMap 값은: {First=Java, Second=Python}
따라서 세 클래스 모두 고유 키에서 값으로의 매핑을 나타내므로 Map 인터페이스를 구현합니다 .
  • HashMap은 키 해싱을 기반으로 하는 맵입니다. O(1) 가져오기/넣기 작업을 지원합니다. 키에는 일관된 hashCode()equals() 구현이 있어야 합니다 .

  • LinkedHashMap은 HashMap 과 매우 유사 하지만 요소가 추가(또는 액세스)되는 순서가 있으므로 반복 순서는 배치 순서(또는 디자인 매개변수에 따라 액세스 순서)와 동일합니다.

  • TreeMap 은 트리 기반 매핑입니다. 넣기/가져오기 작업에는 O(log n) 시간이 걸립니다. 이를 위해서는 요소에 비교 또는 비교기를 사용하는 일종의 비교 메커니즘이 있어야 합니다. 반복 순서는 이 메커니즘에 의해 결정됩니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION