6
Tôi đã làm một số tiêu chuẩn so sánh hiệu suất của int vs Integer, dài so với Long, trống class instance vs class instance với giá trị dài.28 byte cho đối tượng trống/lớp thể hiện?
Và tôi có vài câu hỏi mà tôi không thể trả lời bản thân mình:
- tại sao tạo đối tượng của lớp rỗng hoặc đối tượng có 28 byte?
- instantiating đối tượng Long mất 29 byte, nguyên thủy dài 8 byte, vậy tại sao sự khác biệt cho lớp trống chỉ là 1 byte? JVM đang làm loại tối ưu hóa nào?
tôi đã sử dụng JDK1.6.0_30 trên hệ điều hành MacOS, và mã có sẵn tại https://github.com/mousator/benchmarks/blob/master/src/sk/emandem/michal/AutoboxingTypeBenchmark.java (bạn có thể kiểm toàn bộ dự án)
Cám ơn câu trả lời!
Cảm ơn câu trả lời @Louis. Tôi đã thử MemoryMeasurer, cho lớp trống tôi nhận được 20 byte, do đó, 4 byte là con trỏ mảng và 16 ví dụ (mặc dù 16 một chút lạ). Tuy nhiên, phương pháp thời gian chạy là thú vị vì nó tạo ra các phép đo khá ổn định - lặp lại lặp lại của trình tự "gọi GC, đo bộ nhớ, mã cuộc gọi, đo bộ nhớ, gọi GC" nhận được cùng một giá trị. Sự khác biệt duy nhất trong phép đo giữa thời gian chạy và MemoryMeasurer là trong lớp trống và int wrapper (cả 25B vs 20B) – mousator
Tôi nhấn enter .. Vì vậy, câu hỏi tiếp theo là, tôi có thể ước tính OOME sử dụng 20 hoặc 25B? – mousator
Uh. Tôi sẽ không phụ thuộc vào nó. Đơn giản hơn rất nhiều chỉ để thử nó và xem. –