我知道Java是通过引用或按值传递的问题正在击败死马,但我确实有关于内存使用情况的问题。在变量之间传递大量数据时最大限度地减少内存使用量
我理解Java现在的方式是:
public class MyInt{
int value;
}
MyInt x;
MyInt y;
x = new MyInt(3); // value of x is now 3
y = x; // y now points to same object that x points to
y.setValue(1); // value of said object is now 1
x.getValue(); // should return 1 instead of 3
但我的问题是内存密集型它是如何设置这个新y
?例如:如果明特的数值是一些非常非常大的图像,而不是一个整数,
x = new MyImage("very large image"); // eats memory depending on size of image
自然会占用大量的内存有图像加载如果它是非常大的。我只是想确保当我打电话
y = x; // y now points to same image that x does
y
只是到x
右侧已经指向的对象的引用?所以当我拨打y = x
;只要该图像已经通过初始化x
加载,无论图像有多大都不会造成内存密集。
这是正确的吗?我应该避免将同一个非常大的图像多次加载到内存中的哪些缺陷?
如果您担心可能多次使用_same_参数调用'new MyImage(“some string”)',并且它会创建同一大图的多个副本,那么您可以使用缓存来避免问题。像HashMap这样的'Map'将是维护这种缓存的一种简单方法。 – ajb
'这是否正确?' - 是的,y和x只保存大对象的内存地址。内存地址在大多数系统上是一个整数(小)。 –