기타
애노테이션의 변화
애노테이션 관련 두가지 큰 변화
- 자바8부터 애노테이션을 타입 선언부에도 사용할 수 있게됨
- 자바8부터 애노테이션을 중복해서 사용할 수 있게됨
타입 선언부
- 제네릭 타입
- 변수 타입
- 매개변수 타입
- 예외 타입 등
타입에 사용할 수 있으려면
- TYPE_PARAMETER: 타입 변수에만 사용할 수 있음
- TYPE_USE: 타입 변수를 포함해 모든 타입 선언부에 사용 가능
중복 사용할 수 있는 애노테이션 만들기
-
중복 사용할 애노테이션 만들기
-
중복 애노테이션 컨테이너 만들기
-
컨테이너 애노테이션은 중복 애노테이션과 @Retention 및 @Target이 같거나 더 넓어야 함
-
Chicken.java
@Retension(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) @Repeatable(ChickenContainer.class) //여러개의 애노테이션들을 감싸고 있을 컨테이너 애노테이션 타입을 선언함으로써 중복 애노테이션 사용가능 public @interface Chicken{ String value(); }
ChickenContainer.java
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) public @interface ChickenContainer{ Chicken[] value(); }
App.java
@Chicken("양념") @Chicken("마늘간장") public class App{ public static void main(String[] args){ ChickenContainer chickenContainer= App.class.getAnnotation(ChickenContainer.class); Arrays.stream(chickenContainer.value()).forEach(c->{ System.out.println(c.value()); }); } }
-
배열 Parallel 정렬
Arrays.parallelSort()
- Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능 제공
병렬 정렬 알고리즘
-
배열을 둘로 계속 쪼갬
-
합치면서 정렬
-
sort()와 parallelSort() 비교
int size=1500; int[] numbers= new int[size]; Random random= new Random(); IntStream.range(0,size).forEach(i->number[i]=random.nextInt()); long start= System,nanoTime(); Arrays.sort(numbers); System.out.println("serial sorting took "+(System.nanoTime()-start)); IntStream.range(0,size).forEach(i->number[i]=random.nextInt()); start=System.nanoTime(); Arrays.parallelSort(numbers); System.out.println("parallel sorting took "+(System.nanoTime()-start));
-
출력
serial sorting took 648967 parallel sorting took 343064
-
둘 다 알고리즘 효율성 O(n logN)(시간), O(n)(공간) 같음. 다만, Parallel이 속도가 좀 더 빠름
Metaspace
GCC 변경사항
JVM의 여러 메모리 영역중 PermGen 메모리 영역이 없어지고 Metaspace 영역이 생김
PermGen
-
Permanent Generation, 클래스 메타 데이터를 담는 곳(클래스에 대한 정보)
-
Heap 영역에 속함
-
기본값으로 제한된 크기를 가지고 있음(클래스를 많이 쓸수록 공간이 커지고 공간이 꽉 찰 수 있음 -> PermGen 사이즈 늘림(근본적 해결책 x)
근본적 해결책: 정리가 되지 않는 클래스를 찾아서 정리 해야함)
-
-XX: PermSize=N, PermGen 초기 사이즈 설정
-
-XX: MaxPermSize= N, PermGen 최대 사이즈 설정
Metaspace
- 클래스 메타데이터를 담는 곳
- Heap 영역이 아니라(힙 영역에는 Young Generation(얼마전에 만들어진)과 Old Generation(만든지 오래된)만 들어있음), Native 메모리 영역(OS가 제공하는 메모리)
- 기본값으로 제한된 크기를 가지고 있지 않음. 필요한만큼 계속 늘어남
- 자바8부터 PermGen 관련 java 옵션은 무시
- -XX: MetaspaceSize= N, Metaspzce 초기 사이즈 설정
- -XX: MaxMetaspzceSize= N, Metaspace 최대 사이즈 설정
참고
https://www.inflearn.com/course/the-java-java8
Author And Source
이 문제에 관하여(기타), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alwayslee_12/기타저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)