sách gpt4 ăn đã đi

Tại sao bạn nên tránh sử dụng trình hoàn thiện và trình dọn dẹp trong Java

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN Java Tại sao bạn nên tránh sử dụng Finalizer và Cleaner này được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Trình hoàn thiện trước java9, java9 sử dụng trình dọn dẹp thay vì trình hoàn thiện. So với trình hoàn thiện, trình dọn dẹp (tồn tại trong một lớp Cleaner độc lập và có thể được đưa vào lớp tương ứng khi cần) không gây ô nhiễm API và trình dọn dẹp có thư viện lớp để kiểm soát luồng của nó (cả hai đều được thực thi trong các luồng nền).

Những lý do nên tránh:

sự bất ổn về hành vi

Cả hai đều không đảm bảo việc thực thi kịp thời. Thời gian từ khi có thể truy cập được phương thức (đối tượng bị rỗng) cho đến lần thực thi cuối cùng dài tùy ý. Vì vậy, đừng bao giờ sử dụng chúng để cập nhật trạng thái liên tục quan trọng, chẳng hạn như giải phóng tài nguyên luồng, khóa phân tán, v.v.

Hai phương thức System.gc và System.runFinalization sẽ tăng cơ hội thực thi trình hoàn thiện và trình dọn dẹp, nhưng không có gì đảm bảo rằng chúng sẽ được thực thi. Hai phương pháp duy nhất có thể đảm bảo rằng nó sẽ được thực thi (System.runFinalizersOnExit và Runtime.runFinalizersOnExit) có những sai sót nghiêm trọng và đã không được dùng nữa trong một thời gian dài.

vấn đề về tính di động

Các thuật toán thu thập rác vùng heap JVM khác nhau là khác nhau. Nếu chương trình phụ thuộc vào thời gian khi trình hoàn thiện hoặc trình dọn dẹp được thực thi thì hiệu suất của chương trình có thể hoàn toàn khác nhau.

Vấn đề về hiệu suất

Trình hoàn thiện và trình dọn dẹp có ảnh hưởng rất nghiêm trọng đến hiệu suất.

Câu hỏi bảo mật

  • Nếu một ngoại lệ xảy ra trong bộ hoàn thiện, luồng sẽ chấm dứt, nhưng dấu vết luồng sẽ không được in hoặc thậm chí cảnh báo sẽ không được in và đối tượng bị hủy sẽ ở trạng thái bị hủy nếu một luồng khác sử dụng đối tượng trong điều này. trạng thái bị phá hủy thì hành vi sẽ không chắc chắn về giới tính. Người dọn dẹp không có vấn đề này.
  • Tấn công hoàn thiện: Phương thức hoàn thiện sẽ có lợi khi xây dựng một đối tượng lớp con độc hại và gọi bất hợp pháp phương thức lớp cha. Các lớp cuối cùng sẽ không được phân lớp độc hại, vì vậy chúng sẽ không phải chịu các cuộc tấn công hoàn thiện. Đối với các lớp không phải là lớp cuối cùng, hãy ghi đè một phương thức hoàn thiện trống và sửa đổi nó bằng phương thức cuối cùng để ngăn chặn các cuộc tấn công hoàn thiện.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Đối tượng được xây dựng không thể được khởi tạo lại sau khi sử dụng
công cộng lớp học Thử nghiệm{
   riêng tư Boolean cờ = ĐÚNG VẬY ;
   // ngăn chặn việc khởi tạo
   công cộng Thử nghiệm() {
     nếu như (lá cờ){
       ném mới Ngoại lệ thời gian chạy( "Không được phép tạo lại đối tượng" );
     }
   }
   công cộng vô hiệu nói() {
     Hệ thống.out.println( "DemoUtils.say" );
   }
}
//Xây dựng lớp con bất hợp pháp
lớp học Demo2 mở rộng Thử nghiệm{
   công cộng Demo2(){}
   // Xây dựng cuộc tấn công hoàn thiện
   @Ghi đè
   được bảo vệ vô hiệu hoàn thiện() ném Có thể ném {
     // Phương thức của lớp cha sẽ được gọi
     cái này .nói();
     Hệ thống.thoát( 0 );
   }
   công cộng tĩnh vô hiệu main(String[] args) ném Ngoại lệ bị ngắt {
     thử {
       // Việc tạo một đối tượng của lớp con chắc chắn sẽ gọi hàm tạo của lớp cha, do đó sẽ xảy ra ngoại lệ.
       //Nhưng phương thức của lớp cha vẫn được thực thi trong gc
       Bản trình diễn = mới Demo2();
       demo.say();
     } nắm lấy (Ngoại lệ e) {
       Hệ thống.out.println(e);
     }
     Hệ thống. gc();
     //Dành thời gian cho việc thu gom rác
     Chủ đề.ngủ( 5000 );
   }
}
//Chạy kết quả
java.lang.RuntimeException: Không được phép giải trí đối tượng
DemoUtils.say

Hai công dụng:

mạng lưới an toàn

Khi chủ sở hữu tài nguyên quên sử dụng phương thức đóng, trình hoàn thiện và trình dọn dẹp có thể hoạt động như một mạng lưới an toàn. Mặc dù không có gì đảm bảo việc giải phóng tài nguyên kịp thời, nhưng tốt hơn là nên giải phóng nó muộn hơn là không bao giờ giải phóng nó. Việc sử dụng mạng lưới an toàn như vậy đòi hỏi phải cân nhắc cẩn thận xem liệu việc thanh lọc có xứng đáng với chi phí bỏ ra hay không. Do đó, mạng lưới an toàn đã được thêm vào một số triển khai AutoCloseable trong Java.

Đây là mã nguồn của FileOutputStream.

Tại sao bạn nên tránh sử dụng trình hoàn thiện và trình dọn dẹp trong Java

Tái chế các đối tượng ngang hàng cục bộ

Máy ngang hàng cục bộ: Phương thức gốc của hoạt động Java thực sự được ủy quyền cho một đối tượng ngang hàng cục bộ. Sau khi sử dụng xong, đối tượng Java sẽ được tái chế bởi GC. Tuy nhiên, đối tượng ngang hàng này không phải là một đối tượng Java và sẽ không được GC tái chế. Nếu hiệu suất của đối tượng này có thể chấp nhận được và không có tài nguyên nào cần được giải phóng kịp thời, bạn có thể sử dụng trình hoàn thiện hoặc trình dọn dẹp để tái chế nó. Nhưng nếu hiệu suất của thiết bị ngang hàng không thể chấp nhận được và nó có tài nguyên cần được chấm dứt ngay lập tức thì cần phải cung cấp một phương pháp chặt chẽ.

Trên đây là chi tiết về lý do tại sao bạn nên tránh sử dụng trình hoàn thiện và Trình dọn dẹp trong Java. Để biết thêm thông tin về việc tránh sử dụng trình hoàn thiện và Trình dọn dẹp trong Java, vui lòng theo dõi các bài viết liên quan khác của tôi! .

Liên kết gốc: https://www.cnblogs.com/chenxuyuan-liu/p/14591193.html.

Cuối cùng, bài viết này về lý do tại sao bạn nên tránh sử dụng trình hoàn thiện và Trình dọn dẹp trong Java kết thúc tại đây. Nếu bạn muốn biết thêm về lý do tại sao bạn nên tránh sử dụng trình hoàn thiện và Trình dọn dẹp trong Java, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục xem các bài viết liên quan. tất cả Hãy ủng hộ blog của tôi trong tương lai! .

26 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress