Tôi có một bộ nhớ Map
để lưu trữ các đối tượng của mình. Tôi muốn xả bộ nhớ khi tôi hết bộ nhớ. Tôi đang thực hiện việc này ngay bây giờ:Java: trên chi phí gọi Runtime.freeMemory(), Runtime.totalMemory() và Runtime.maxMemory()
void add(K key, V value) {
if (underPressure()) {
flush(innerMap);
}
innerMap.add(k, v);
}
boolean underPressure() {
Runtime rt = Runtime.getRuntime();
long maxMemory = rt.maxMemory();
long freeMemory = rt.freeMemory();
return (double) freeMemory/maxMemory < threshold;
}
Được gọi là mỗi lần chèn, giá đắt như thế nào? Theo sự hiểu biết của tôi, vì nó là một xấp xỉ, nó phải bằng cách nào đó được lưu trong bộ nhớ cache bởi jvm, nhưng không ai biết nhiều hơn về điều này không?
Các máy khác biệt có thể khác nhau của nó. Làm thế nào đắt tiền là nó trên máy tính của bạn? Bạn cũng có thể kiểm tra 'return freememory
Lưu ý: freeMemory chỉ cho bạn biết bạn có bao nhiêu bộ nhớ trước khi bạn cần thực hiện GC. Nó không cho bạn biết bao nhiêu sẽ được miễn phí sau khi một GC. –
Cá nhân tôi sẽ đi 'final boolean underPressure()' hoặc một người nào đó sẽ phân lớp và ghi đè phương thức bằng một đoạn rap với lời bài hát thực sự tồi tệ. Sau đó, bất cứ khi nào ai đó nhìn thấy chữ ký của phương thức đó, nếu chúng không quá một độ tuổi nhất định, chúng sẽ nhận diện nó với phiên bản của Vanilla Ice và bạn sẽ cắn bụi. :-( – corsiKa