2012-05-03 29 views
34

Có hình phạt nào để thêmHình phạt để thực thi Serializable trong Java?

implements Serializable 

vào một lớp Java? Tác động đến kích thước của đối tượng hoặc hiệu suất được tạo ra?

+1

http://www.javalobby.org/java/forums/t88856.html –

+2

Liên kết đó là 5 tuổi. – adarshr

+3

Khái niệm? –

Trả lời

24

Chi phí gần bằng không, không đáng lo ngại.

Một số thông tin chi tiết:

  • Không có tăng kích thước của mỗi đối tượng dụ
  • Có một sự gia tăng nhỏ trong kích thước của lớp chính nó, nhưng vì đây là một chi phí một lần nó là tầm thường khi phân bổ trên một số lượng lớn các trường hợp
  • Có thể có một chút chi phí thời gian chạy bổ sung cho bất kỳ thứ gì cần thực hiện kiểm tra giao diện khi chạy (phản ánh, tra cứu instancof, áp lực bổ sung trên bộ đệm nội tuyến, v.v.). Một lần nữa, điều này có thể không đáng kể cho hầu hết các mục đích.
  • Có thể tuần tự hóa là giao diện đánh dấu , không có phương pháp nào cần được triển khai. Các ví dụ về giao diện điểm đánh dấu khác là: Clonable, SingleThreadModel, Event listener.
24

Trừ khi bạn/người khác thực sự tuần tự hóa/deserializes, sẽ không có bất kỳ tác động nào. Serializable chỉ là một giao diện điểm đánh dấu.

Nó có thể sẽ chỉ tăng kích thước của bytecode được tạo ra bởi một vài byte.

+0

Cảm ơn, cũng nghĩ vậy. – AChoice

24

Không có tác động về hiệu suất trừ khi bạn thực hiện tuần tự hóa/deserialization nhưng có sự cân bằng thương mại về thiết kế api.

Từ Effective java bởi Joshua Bloch

  • Một chi phí lớn thực hiện Serializable là nó làm giảm sự linh hoạt để thay đổi thực hiện của một lớp một khi nó đã được phát hành
  • Một chi phí thứ hai thực hiện Serializable là rằng nó làm tăng khả năng lỗi và lỗ hổng bảo mật
  • Chi phí thứ ba của việc triển khai Serializable là nó tăng gánh nặng thử nghiệm liên quan đến việc phát hành phiên bản mới của một lớp học

Upto mức độ này áp dụng cho bạn tùy thuộc vào hệ thống của bạn.

+0

Không có tác động hiệu suất ngay cả khi bạn * làm * thực hiện tuần tự hóa/deserialization, bởi vì nếu bạn không thực hiện 'Serializable' bạn không thể làm điều đó ở tất cả vì vậy không có gì để so sánh nó với. – EJP

+0

Cảm ơn Joshua-trích dẫn. Tôi đồng ý. – AChoice

+0

Tôi thực sự sẽ không triển khai Serializable mà không đọc cuốn sách Java hiệu quả đầu tiên. –

0

Serializable chỉ là giao diện "điểm đánh dấu". Nó không yêu cầu bạn phải thực hiện bất kỳ phương pháp nào.

Điều duy nhất là bạn nên có static final long serialVersionUID để giúp API tuần tự hóa. Điều đó có giá trị một giá trị long duy nhất cho mỗi lớp được tuần tự hóa.

Bạn có thể muốn xem this article about Java Serialization API. Nó mô tả hầu hết các caveat của serialization/deserialization cụ thể.

1

Bạn nên luôn xem xét phí bảo trì trước.Chi phí của một ứng dụng được triển khai trên trực tiếp của nó có thể là nhiều lần chi phí phát triển nó.

Trong trường hợp này, chi phí tạo lớp Serializable, nhưng không thực sự được sử dụng cho Tuần tự hóa có thể gây ra lỗi hoặc nhầm lẫn xa hơn so với chi phí hiệu suất. ví dụ. nói rằng phải mất 1 phút hoặc thời gian của ai đó để xác định Serializable là không cần thiết, điều này có thể chi phí nhiều hơn so với thời gian khởi động thêm vài nano giây mà ứng dụng phải gánh chịu.

Nếu bạn thực sự cần nó để được Serializable, bạn không thể so sánh nó với phiên bản không Serializable vì chỉ có trường hợp đầu tiên thực sự sẽ làm công việc cần thiết.

Các vấn đề liên quan