[JAVA8] 배열 병렬 정렬 , Metaspace

Arrays.parallelSort()

Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다.

 

병렬 정렬 알고리즘

  • 배열을 둘로 계속 쪼갠다.
  • 합치면서 정렬한다.
    public static void main(String[] args) {
        int size = 1500;
        int[] numbers = new int[size];
        Random random = new Random();

        IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());
        long start = System.nanoTime(); // 시작 시간
        Arrays.sort(numbers); // Thread를 하나만 쓴다. 퀵 정렬
        System.out.println("serial sorting took " + (System.nanoTime() - start));

        IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());
        start = System.nanoTime();  // 시작 시간
        Arrays.parallelSort(numbers);
        System.out.println("parallel sorting took " + (System.nanoTime() - start));

        // 출력
        // serial sorting took 951400
        // parallel sorting took 716100
        
        // 배열의 사이즈나 여러 가지 조건에 따라 결과가 다를수는 있다.
    }

 

 

Metaspace

JVM의 여러 메모리 영역 중에 PermGen 메모리 영역이 없어지고 Metaspace영역이 생겼다.

 

PermGen

  • permanent generation 클래스 메타데이터를 담는 곳
  • Heap 영역에 속함
  • 기본값으로 제한된 크기를 가지고 있음
  • -XX:PermSize=N , PermGen 초기 사이즈 설정
  • -XX:MaxPermSize=N , PermGen 최대 사이즈 설정

 

Metaspace

  • 클래스 메타데이터를 담는 곳
  • Heap영역이 아니라 , Native 메모리 영역이다. (OS가 제공하는 메모리)
  • 기본값으로 제한된 크기를 가지고 있지 않다. (필요한 만큼 계속 늘어난다.)
  • 자바8 부터는 PermGen관련 java 옵션은 무시한다.
  • -XX:MetaspaceSize=N , Metaspace 초기 사이즈 설정
  • -XX:MaxMetaspaceSize=N , Metaspace 최대 사이즈 설정

Java Memory Profiling에 대하여 – ① JVM 메모리 이해와 케이스 스터디 : 네이버 포스트 (naver.com)

Java Memory Profiling에 대하여 – ② 메모리 모니터링과 원인분석 : 네이버 포스트 (naver.com)

Java 8: From PermGen to Metaspace - DZone Java

 

 

더 자바, Java 8 - 인프런

자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이

www.inflearn.com

'기록 > JAVA' 카테고리의 다른 글

Reflection 리플렉션  (0) 2021.02.07
[JAVA8] 어노테이션의 변화  (0) 2021.01.17
[JAVA8] CompletableFuture  (0) 2021.01.17
Callable과 Future  (0) 2021.01.16
Executors  (0) 2021.01.16