Các Tính Năng Chính Được Giới Thiệu Trong Java 12 - Rio88 Game Bài Twin

| May 16, 2025 min read

13 tháng 8 năm 2024 | Công Nghệ Máy Tính

Bài viết này sẽ tóm tắt các tính năng chính được giới thiệu trong phiên bản Java 12.

1. Biểu Thức Switch (Phiên Bản Xem Trước)

Trước đây, lệnh switch trong ngôn ngữ Java là một câu lệnh điều khiển luồng ngoài trừ lệnh if-else. Khi Java 1.0 ra đời, lệnh switch chỉ hỗ trợ bốn kiểu dữ liệu (byte, short, intchar). Từ Java 1.5, nó bắt đầu hỗ trợ kiểu dữ liệu liệt kê (enum), và từ Java 1.7, lệnh switch có thể làm việc với kiểu dữ liệu String. Mặc dù những cải tiến này đã tăng cường đáng kể sự linh hoạt và tiện ích của lệnh switch, nhưng vẫn còn tồn tại một số vấn đề rõ rệt:

  • Hành Vi Rơi Xuống (Fall-through): Nếu không thêm cụm từ break vào cuối mỗi trường hợp case, chương trình sẽ tiếp tục thực hiện qua trường hợp kế tiếp mà không kiểm tra điều kiện, dẫn đến lỗi nghiêm trọng.
  • Mã Lệnh Đạo Diễn: Mỗi case chỉ tương ứng với một điều kiện duy nhất, dẫn đến việc lặp lại cấu trúc mã lệnh, gây lãng phí thời gian và công sức khi lập trình.

Java 12 đã biến đổi câu lệnh switch thành một biểu thức mạnh mẽ hơn, giải quyết triệt để vấn đề Fall-through bằng cách tự động thêm break ở cuối mỗi dòng case. Cải tiến này giúp tăng cường khả năng diễn đạt của lệnh switch, làm cho nó trở nên gọn gàng và dễ sử dụng hơn trong lập trình Java hiện đại. Tuy nhiên, tính năng này chưa được mở rộng hoàn toàn; Java 12 chỉ cung cấp phiên bản xem trước. Để sử dụng tính năng này, cần thêm tham số --enable-preview khi biên dịch và chạy chương trình.

Dưới đây là một đoạn mã minh họa:

// src/main/java/SwitchExpressionsTest.java
public class SwitchExpressionsTest {
    private static String getDayTypeUsingJava7SwitchStatement(String day) {
        String type;
        switch (day) {
            case "Monday":
            case "Tuesday":
            case "Wednesday":
            case "Thursday":
            case "Friday":
                type = "Weekday";
                break;
            case "Saturday":
            case "Sunday":
                type = "Weekend";
                break;
            default:
                type = "Unknown";
        }
        return type;
    }

    // Các phương thức khác...
}

2. Shenandoah: Bộ Thu Gom Rác Giảm Thời Gian Dừng

Các bộ thu gom rác truyền thống như Parallel GC và CMS thường phải đối mặt với thời gian dừng dài khi xử lý khối lượng lớn bộ nhớ. Điều này gây khó khăn cho các ứng dụng yêu cầu phản hồi nhanh chóng và độ trễ thấp.

Java 12 giới thiệu bộ thu Tai Benvip Game Danh Bai 3C gom rác mới mang tên Shenandoah, có khả năng giảm thiểu thời gian dừng bằng cách thực hiện quá trình đánh dấu và dọn dẹp đồng thời với các luồng ứng dụng đang chạy. Điều này giúp cải thiện hiệu suất ứng dụng một cách mượt mà hơn.

Để kích hoạt bộ thu gom rác Shenandoah, bạn có thể sử dụng lệnh sau:

java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -jar app.jar

3. API Hằng Số JVM

JVM chứa nhiều hằng số như chuỗi, lớp, trường, phương thức… Thông thường, việc truy cập vào chúng đòi hỏi các thao tác phức tạp trên bytecode, vừa khó hiểu vừa dễ mắc lỗi. Java 12 đã bổ sung API hằng số (được đặt trong gói java.lang.constant) nhằm đơn giản hóa và đảm bảo an toàn về kiểu dữ liệu khi truy cập vào vùng lưu trữ hằng số của JVM.

API này chủ yếu phục vụ các nhà phát triển chuyên sâu (ví dụ: tạo hoặc phân tích bytecode, công cụ phản chiếu), vì vậy phần lớn các lập trình viên ứng dụng không cần sử dụng đến nó.

4. Tăng Cường API Chuỗi (String)

Java 12 đã nâng cấp API chuỗi bằng cách bổ sung bốn phương thức mới:

  • indent(int n): Phương thức này dùng để điều chỉnh lề cho mỗi dòng trong chuỗi. Nếu n dương, nó sẽ thêm khoảng trắng tương ứng vào đầu mỗi dòng; nếu n âm, nó sẽ giảm số lượng khoảng trắng đó (nếu có).
  • transform(Function<? super String, ? extends R> f): Phương thức này nhận một hàm làm tham số, chuyển đổi chuỗi theo cách định nghĩa bởi hàm đó và trả về kết quả.
  • describeConstable()resolveConstantDesc(MethodHandles.Lookup lookup): Hai phương thức này hỗ trợ API hằng số JVM, cho phép chuỗi đóng vai trò như một mô tả hằng số.

Ví dụ sử dụng các phương thức này:

// src/main/java/StringAPIEnhancementsTest.java
public class StringAPIEnhancementsTest {
    public static void main(String[] args) {
        System.out.println("Hello, World!".indent(4)); // "    Hello, World!"
        String after = "Hello, World!"
            .transform(String::toUpperCase)
            .transform(str -> new StringBuffer(str).reverse().toString());
        System.out.println(after); // "!DLROW ,OLLEH"
    }
}

5. Tăng Cường API Files

Java 12 cũng đã bổ sung một phương thức tĩnh mới cho API Files: long mismatch(Path path, Path path2). Phương thức này so sánh nội dung của hai tập tin, trả về -1 nếu chúng khớp nhau hoặc vị trí của byte đầu tiên không khớp nếu chúng khác nhau.

Ví dụ:

// src/main/java/FilesAPIEnhancementsTest.java
import java.nio.file.Files;
import java.nio.file.Path;

public class FilesAPIEnhancementsTest {
    public static void main(String[] args) throws Exception {
        Path path1 = ...;
        Path path2 = ...;
        System.out.println(Files.mismatch(path1, path2));
    }
}

6. Tăng Cường API NumberFormat

Java 12 bổ sung phương thức NumberFormat getCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle) vào lớp NumberFormat, cho phép hiển thị số lớn theo dạng rút gọn (ví dụ: 1000 có thể hiển thị thành 1K).

Ví dụ:

// src/main/java/NumberFormatAPIEnhancementsTest.java
public class NumberFormatAPIEnhancementsTest {
    public static void main(String[] args) {
        NumberFormat usCompactFormatShort = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
        System.out.println(usCompactFormatShort.format(10000)); // 10K
    }
}

7. Tăng Cường API Collectors

Java 12 bổ sung phương thức teeing vào lớp Collectors, cho phép thực hiện hai thao tác thu thập khác nhau trên cùng một luồng dữ liệu và hợp nhất kết quả của chúng.

Ví dụ:

// src/main/java/CollectorsAPIEnhancementsTest.java
import java.util.stream.Collectors;

public class CollectorsAPIEnhancementsTest {
    public static void main(String[] args) {
        Map<String, Object> result = numbers.stream()
            .collect(Collectors.teeing(
                Collectors.maxBy(Integer::compareTo),
                Collectors.averagingInt(Integer::intValue),
                (r1, r2) -> Map.of("max", r1.get(), "avg", r2)
            ));
    }
}

8. Lưu Trữ Dữ Liệu Lớp Theo Mặc Định

Java 12 tự động tạo và tải các tệp lưu trữ chia sẻ dữ liệu lớp cơ bản, giúp tối ưu hóa thời gian khởi động mà không cần can thiệp thủ công từ người dùng.

tải tool hack tài xỉu 789 club miễn phí 9. Thu Gom Rác G1 Có Thể Ngắt Qua

G1, một bộ thu gom rác hiệu quả dành cho ứng dụng lớn, giờ đây có thể tạm ngừng quá trình thu gom rác giữa chừng để tối ưu hóa hiệu suất tổng thể.

10. Trả Lại Bộ Nhớ Không Sử Dụng

Java 12 cải thiện khả năng trả lại bộ nhớ không sử dụng cho hệ điều hành, giúp tiết kiệm tài nguyên.

11. Bộ Kiểm Tra Hiệu Suất Nhỏ

Java 12 cung cấp một bộ công cụ kiểm tra hiệu suất nhỏ dựa trên JMH, giúp đo lường chính xác hơn các đoạn mã nhỏ trong ứng dụng.

Tóm lại, Java 12 mang đến nhiều cải tiến quan trọng giúp tối ưu hóa hiệu suất và trải nghiệm lập trình.