애노테이션 관련 두가지 큰 변화
타입 선언부
타입에 사용할 수 있으려면
중복 사용할 수 있는 애노테이션 만들기
중복 사용할 애노테이션 만들기
중복 애노테이션 컨테이너 만들기
컨테이너 애노테이션은 중복 애노테이션과 @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());
});
}
}
Arrays.parallelSort()
병렬 정렬 알고리즘
배열을 둘로 계속 쪼갬
합치면서 정렬
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이 속도가 좀 더 빠름
GCC 변경사항
JVM의 여러 메모리 영역중 PermGen 메모리 영역이 없어지고 Metaspace 영역이 생김
PermGen
Permanent Generation, 클래스 메타 데이터를 담는 곳(클래스에 대한 정보)
Heap 영역에 속함
기본값으로 제한된 크기를 가지고 있음(클래스를 많이 쓸수록 공간이 커지고 공간이 꽉 찰 수 있음 -> PermGen 사이즈 늘림(근본적 해결책 x)
근본적 해결책: 정리가 되지 않는 클래스를 찾아서 정리 해야함)
-XX: PermSize=N, PermGen 초기 사이즈 설정
-XX: MaxPermSize= N, PermGen 최대 사이즈 설정
Metaspace