Đối tượng Scala tuân thủ các quy tắc tương tự như đối tượng Java, vì vậy mọi thông tin về những điều đó là chính xác. Here is one source, dường như ít nhất là phù hợp với các JVM 32 bit. (JVM 64 bit sử dụng 8 byte cho mỗi con trỏ, thường làm việc thêm 4 byte cộng với 4 byte cho mỗi con trỏ - nhưng có thể ít hơn nếu JVM đang sử dụng con trỏ nén, mặc định bây giờ, tôi nghĩ vậy.)
Tôi sẽ giả định máy 64 bit không có con trỏ nén (trường hợp xấu nhất); sau đó, Tuple3
có hai con trỏ (16 byte) cộng với Int
(4 byte) cộng với chi phí đối tượng (~ 12 byte) được làm tròn tới 8 hoặc 32 byte gần nhất, cộng thêm một đối tượng phụ (8 byte). phiên bản chuyên biệt của Int
. (Đáng buồn thay, nếu bạn sử dụng nguyên thủy trong bộ dữ liệu, chúng chiếm không gian nhiều hơn so với khi bạn sử dụng các phiên bản được gói.). String
là 32 byte, IIRC, cộng với mảng cho dữ liệu là 16 cộng với 2 cho mỗi ký tự. java.sql.Timestamp
cần lưu trữ một vài số Long
s (tôi nghĩ là vậy), vì vậy đó là 32 byte. Tất cả đã nói, nó trên thứ tự của 120 byte cộng với hai cho mỗi nhân vật, mà tại ~ 20 ký tự là ~ 160 byte.
Hoặc, hãy xem this answer để biết cách đo kích thước đối tượng của bạn trực tiếp. Khi tôi đo lường nó theo cách này, tôi nhận được 160 byte (và ước tính của tôi ở trên đã được sửa chữa bằng cách sử dụng dữ liệu này để nó phù hợp; Tôi đã có một số lỗi nhỏ trước đây).
Nguồn
2012-06-26 14:22:28
Điểm tốt, tôi quên mất thêm chi phí trong chuỗi cộng với chi phí đối tượng. Tuy nhiên, nó không phải là rất nhiều dữ liệu. –
Tại sao 24 cộng 2 mỗi ký tự trên mảng Chuỗi? IIRC, một mảng là 8 byte so với 4 byte cho một mảng không, cộng với các phần tử. –
@DanielC.Sobral - Có đối tượng trên không cộng với chiều dài, đó là 16 byte trên một máy 64 bit, vì vậy tôi đã tắt một chút. –