Tôi cần phải vượt qua một x/y xung quanh. Tôi chỉ sử dụng java.awt.Point. Tôi làm điều này rất nhiều xem xét nó là bản chất của ứng dụng, nhưng tấn chậm hơn sau đó mảng bình thường. Tôi cũng đã cố gắng tạo ra "FastPoint" của riêng tôi, đó chỉ là một hàm tạo lớp int/y và rất đơn giản, nó cũng thực sự rất chậm.Tại sao các điểm chậm lại
Thời gian bằng millescond.
java.awt.Point: 10.374
FastPoint: 10.032
Mảng: 1210
public class FastPoint {
public int x;
public int y;
public FastPoint(int x, int y) {
this.x = x;
this.y = y;
}
}
Jvisualvm nói Point (hoặc AWT hoặc của riêng tôi) đang sử dụng tấn bộ nhớ so với int [] mảng đơn giản .
Tôi đoán đó chỉ là chi phí từ việc phải tạo đối tượng thay vì một loại um, cơ bản? Bất kỳ cách nào để tinh chỉnh hoặc tối ưu hóa lớp Point này? Tôi đã chuyển sang mảng int cơ bản (nhanh hơn bây giờ), nhưng chỉ cố gắng hiểu tại sao điều này là chậm và nếu có bất cứ điều gì tôi có thể làm về nó?
Mã kiểm tra:
for (int i = 0; i < maxRuns; i++) {
point = new Point(i,i);
}
for (int i = 0; i < maxRuns; i++) {
a[0] = i; a[1] = i;
}
Tôi không tin rằng việc sử dụng mảng thay vì Đối tượng sẽ dẫn đến tăng thời gian 900%. Thời gian trong ms -> nhưng để làm gì? –
for (int i = 0; i < maxRuns; i++) { point = new Point(i,i); }
for (int i = 0; i < maxRuns; i++) { a[0] = i; a[1] = i; }
– dimecũng vậy, trong phiên bản mảng của bạn, bạn không được ** instantiating ** mảng. Sự khác nhau về chi phí giữa việc tạo các đối tượng/mảng và gán các giá trị * cho * các phần tử trong cùng một mảng là * rộng lớn *. –