JVM Garbage Collector 관련 변화JVM의 여러 메모리 영역중 PermGen 메모리 영역이 없어지고 MetaSpace영역이 생겼다. PermGen (permanent generation)클래스 메타데이터를 담는 곳(클래스 이름, 스태틱한 필드 정보 등)Heap 영역에 속함Heap영역에 Eden 영역(young-genration 만든지 얼마 안된 객체), Old 영역(만든지 오래된 객체), PermGen 영역이 있음기본값으로 제한된 크기를 가지고 있음-XX:PermSize=N : PermGen 초기 사이즈 설정-XX:MaxPermSize=N : PermGen 최대 사이즈 설정PermGen영역은 항상 고정된 크기를 가지고 생성되는데,클래스 로딩을 많이 하거나 동적으로 클래스를 많이 생성하는 경..
Java
Arrays.parallelSort()정렬할 때 Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다. 병렬 정렬 알고리즘배열을 둘로 계속 쪼갠다.합치면서 정렬한다. sort() 와 parallelSort() 비교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); //일반적인 sort : 쓰레드 1개만 사용System.out.println("serial sorting took " +..
Annotation 변화Java 8부터 어노테이션을 타입 선언부에도 사용할 수 있게 되었다.Java 8부터 어노테이션을 중복으로 사용할 수 있게 되었다. 타입 선언부에 사용타입 선언부제네릭 타입변수 타입매개변수 타입예외 타입타입에 사용할 수 있으려면 @Target에 아래 값을 넣어주어야 한다.TYPE_PARAMETER : 타입 변수에만 사용할 수 있다.TYPE_USE : 타입 변수를 포함하여 모든 타입 선언부에 사용할 수 있다.@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE_PARAMETER) //타입 변수에만 사용public @interface Chicken { //어노테이션 생성}public class App { public static v..
CompletableFuture란?자바에서 비동기(Asynchronous) 프로그래밍을 가능하게 하는 인터페이스일반적인 Future 사용시 제약이 많았음 Future 단점외부에서 Future를 완료시킬 수 없다.취소하거나 get()에 타임아웃을 설정할 수 는 있다.블록킹 코드( get() )을 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없다.여러 Future를 조합할 수 없다.예외처리용 API를 제공하지 않는다. CompletableFuture두가지 인터페이스를 구현하고 있다.Implements FutureImplements CompletionStage외부에서 명시적으로 완료시켜버릴 수 있다.예를 들어 몇초 이내 응답이 안오면 기본 값으로 미리 세팅해둔 값을 리턴하도록 만들 수 있다.명시적으로..
Callable 과 FutureCallableRunnable과 유사하지만 작업의 결과를 받을 수 있다는 점이 다르다.어떤 쓰레드에서 작업을 실행했는데, 그 작업의 결과를 가져오고 싶을 때 Runnable은 리턴 타입이 void이기 때문에 불가능하다.그럴 때 Callable을 사용하면 값을 리턴받을 수 있다.Future비동기 작업의 아직 계산되지 않은 결과를 표현하는 인터페이스이다.Callable에서 리턴시켜주는 값이 Future이다.ExecutorService의 submit 메소드는 Callable이나 Runnable 객체를 인수로 받아서 비동기적으로 실행하며, 결과를 Future 객체로 반환한다. 주요 인터페이스get()ExecutorService executorService = Executors.ne..
Executors란?고수준의 Concurrency 프로그래밍Thread나 Runnable처럼 Low-Level의 API를 직접 다루지 않는다.Thread 관리 작업을 고수준의 API에게 일을 위임한다.쓰레드를 만들고 관리하는 작업을 애플리케이션에서 분리Executor가 Thread를 만들고 우리는 Runnable만 제공해주면 된다.Runnable안에 해야할 일을 정의한다.Thread를 만들고 실행하고, 필요없을 때 종료시키고 없애는 일련의 작업들은 Executors가 해준다. Executors가 하는 일Thread 생성 : 애플리케이션이 사용할 Thread 풀을 만들어 관리Thread 관리 : Thread 생명 주기를 관리작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API를 제공..