소소한개발팁
Published 2023. 7. 9. 16:35
Java 10 컴퓨터 언어/Java Version
반응형

1. 지역 변수 타입 추론

Java 10에서는 var 키워드를 사용하여 지역 변수의 타입을 추론할 수 있습니다. 컴파일러가 할당된 값에 기반하여 변수의 타입을 추론하므로 보일러플레이트 코드를 줄이고 코드의 가독성을 향상시킵니다.

 

<java />
public class Example { public static void main(String[] args) { var message = "Hello, World!"; // var를 사용하여 변수 타입 추론 System.out.println(message); var numbers = List.of(1, 2, 3, 4, 5); // var를 사용하여 List<Integer> 타입 추론 System.out.println(numbers); } }

 

2. 애플리케이션 클래스 데이터 공유

Java 10에서는 애플리케이션 클래스 데이터 공유(AppCDS)라는 개념을 도입했습니다. 이를 통해 여러 Java 프로세스가 동일한 클래스 및 메타데이터 아카이브를 공유할 수 있으므로 시작 시간과 메모리 사용량을 줄일 수 있습니다.

 

<java />
public class Example { public static void main(String[] args) { // AppCDS를 사용하여 클래스와 메타데이터 공유 String sharedArchive = "myapp.jsa"; String[] appArgs = new String[] {"arg1", "arg2"}; System.out.println("Starting application..."); ProcessBuilder pb = new ProcessBuilder("java", "-Xshare:dump", "-XX:SharedArchiveFile=" + sharedArchive, "-jar", "myapp.jar"); Process process = pb.start(); int exitCode = process.waitFor(); if (exitCode == 0) { pb = new ProcessBuilder("java", "-Xshare:on", "-XX:SharedArchiveFile=" + sharedArchive, "-jar", "myapp.jar"); pb.command().addAll(Arrays.asList(appArgs)); process = pb.start(); exitCode = process.waitFor(); System.out.println("Application finished with exit code: " + exitCode); } else { System.out.println("Failed to generate shared archive. Application execution aborted."); } } }

 

 

3. 가비지 컬렉터 인터페이스

 Java 10에서는 가비지 컬렉터 인터페이스를 도입했습니다. 이를 통해 JVM에 새로운 가비지 컬렉터를 구현하는 깨끗하고 표준화된 방법을 제공합니다. 이 기능을 사용하면 JVM 코드를 수정하지 않고 다양한 가비지 컬렉터를 실험하고 연결할 수 있습니다.

 

<java />
public class MyGarbageCollector implements GarbageCollectorMXBean { // Garbage Collector 인터페이스를 구현하는 가비지 컬렉터 클래스 @Override public String getName() { // 가비지 컬렉터 이름 반환 return "MyGarbageCollector"; } // ... public static void main(String[] args) { // 새로운 가비지 컬렉터 등록 MyGarbageCollector gc = new MyGarbageCollector(); ManagementFactory.getPlatformMXBeans(GarbageCollectorMXBean.class) .add(gc); // 가비지 컬렉터 동작 확인 System.gc(); } }

 

4. G1을 위한 병렬 전체 가비지 컬렉션

 Java 10에서는 G1 가비지 컬렉터가 병렬 전체 가비지 컬렉션을 도입했습니다. 이를 통해 전체 가비지 컬렉션의 효율성이 향상되고 애플리케이션 일시 중지에 미치는 영향이 줄어듭니다.

 

<java />
public class Example { public static void main(String[] args) { List<Object> objects = new ArrayList<>(); for (int i = 0; i < 1000000; i++) { objects.add(new Object()); } System.gc(); // 가비지 컬렉션 실행 System.out.println("Garbage collection completed."); } }

 

5. 시간 기반 릴리스 버전 관리

 Java 10에서 오라클은 시간 기반 릴리스 버전 관리 방식을 채택했습니다. 이는 Java 릴리스가 엄격한 6개월 주기로 이루어진다는 것을 의미하며, 더 빈번한 기능 릴리스와 예측 가능한 업데이트 일정을 제공합니다.

 

<java />
public class Example { public static void main(String[] args) { Runtime.Version version = Runtime.version(); System.out.println("Java version: " + version); System.out.println("Major: " + version.major()); System.out.println("Minor: " + version.minor()); System.out.println("Security: " + version.security()); System.out.println("Pre-Release: " + version.pre()); System.out.println("Build: " + version.build().orElse("N/A")); } }

 

6. 스레드 로컬 핸드셰이크

Java 10에서는 스레드 로컬 핸드셰이크라는 메커니즘을 도입했습니다. 이를 통해 스레드가 다른 스레드에서 콜백을 실행할 수 있으므로 보다 효율적인 스레드 동기화와 통신이 가능해집니다.

 

<java />
public class Example { public static void main(String[] args) { Thread mainThread = Thread.currentThread(); mainThread.registerThreadLocalHandshake(() -> { System.out.println("Executing handshake callback on main thread."); System.out.println("Thread: " + Thread.currentThread().getName()); System.out.println("Thread ID: " + Thread.currentThread().getId()); }); Thread otherThread = new Thread(() -> { System.out.println("Other thread executing."); mainThread.executeThreadLocalHandshakes(); }); otherThread.start(); try { otherThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } }

 

반응형

'컴퓨터 언어 > Java Version' 카테고리의 다른 글

Java 11  (0) 2023.07.09
Java 9  (0) 2023.07.09
Java 8  (0) 2023.07.06
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!