반응형
이 포스팅에서 작성하는 내용은 더 자바, Java 8 에서 발췌하였습니다.
https://www.inflearn.com/course/the-java-java8
Annotation
- 타입 선언부에서도 사용이 가능
(제네릭, 변수, 매개변수, 예외 타입 등) - 중복해서 사용 가능
- TYPE
- TYPE_PARAMETER : 타입 변수에만 사용 가능
- TYPE_USE : 타입 변수를 포함해서 모든 타입 선언부에 사용 가능
- 중복 사용
- @Repatable(class)
CustomAnnotation.java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@Repeatable(CustomAnnotationBox.class) // 어디에서 사용될 건지
public @interface CustomAnnotation {
String value();
}
CustomAnnotationBox.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface CustomAnnotationBox {
CustomAnnotation[] value(); // CustomAnnotation 사용
}
Example15.java
import java.util.Arrays;
@CustomAnnotation("JAVA")
@CustomAnnotation("PYTHON")
public class Example15 {
public static void main(String[] args) {
/** Annotation Value 가져오기 **/
// 1. getAnnotationsByType 사용
System.out.println("1. getAnnotationsByType 사용");
CustomAnnotation[] customAnnotations = Example15.class.getAnnotationsByType(CustomAnnotation.class);
Arrays.stream(customAnnotations).forEach(a -> {
System.out.println(a.value());
});
// 2. CustomAnnotationBox 사용
System.out.println("2. CustomAnnotationBox 사용");
CustomAnnotationBox customAnnotationBox = Example15.class.getAnnotation(CustomAnnotationBox.class);
Arrays.stream(customAnnotationBox.value()).forEach(a -> {
System.out.println(a.value());
});
}
}
Arrays sort
- Arrays.sort(Array) : 일반적인 정렬 방법
- Arrays.parallelSort(Array) : Fork/Join 프레임워크를 이용해서 병렬로 정렬
- 배열을 둘로 계속 분리한다.
- 이 분리된 배열들을 합치면서 정렬한다.
Metaspace
JVM의 메모리 영역 중, PermGen 영역이 사라지고 Metaspace 영역이 추가되었다.
PermGen
- permanent Generation
- 클래스 메타데이터를 담는 곳
- Heap 영역에 속함
- 할당된 크기만을 가지고 있으며, 해당 크기를 벗어나는 데이터를 담게 되면 오류 발생
- 오류 발생 시, 단순히 크기를 늘려주는 것보다 어디 클래스에서 많이 생성되고 할당 해제가 안되는 지 확인하는 것이 중요(누수가 발생되는 곳을 찾기)
- PermGen 초기 사이즈 설정 : -XX:PermSize=N
- PermGen 최대 사이즈 설정 : -XX:MaxPermSize=N\
- Java8부터는 PermGen 관련 java 옵션은 무시한다.
Metaspace
- PermGen 영역 대신, 클래스 메타데이터를 담는 곳
- Heap 영역이 아닌, Native 메모리 영역
- 할당된 크기만을 가지는 것이 아니라, 필요한 만큼 할당된 크기가 계속 늘어남.
- Metaspace 초기 사이즈 설정 : -XX:MetaspaceSize=N
- Metaspace 최대 사이즈 설정 : -XX:MaxMetaspaceSize=N
반응형
'BE > Java' 카테고리의 다른 글
[Java] Jacoco 간단하게 사용해보기 (Maven) (0) | 2023.07.08 |
---|---|
[Mockito] ArgumentCaptor (0) | 2023.05.29 |
[Java 8] Concurrent Programming (0) | 2023.04.29 |
[Java 8] Date / Time (0) | 2023.04.21 |
[Java 8] Optional (0) | 2023.04.15 |