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

지역 변수 타입 추론

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

 

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);
    }
}

 

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

Java 10에서는 애플리케이션 클래스 데이터 공유(AppCDS)라는 개념을 도입했습니다. 이를 통해 여러 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.");
        }
    }
}

 

 

가비지 컬렉터 인터페이스

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

 

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();
    }
}

 

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

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

 

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.");
    }
}

 

시간 기반 릴리스 버전 관리

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

 

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"));
    }
}

 

스레드 로컬 핸드셰이크

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

 

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

소소한개발팁

@개발자 뱅

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