我有一个类,我想使用大约十到十万个。因此,我不想不必要地浪费内存位置。
仅在其中少数(
如果是,我是否还有其他选择(除了将它们作为自己的类之外)来减少内存使用?
这是我的代码示例(name
and propability
我只需要几次):
public class Neuron {
private String name;
private float propability;
private float connection[];
private float bias;
public Neuron(float[] connection, float bias) {
this.connection = connection;
this.bias = bias;
}
public Neuron(int propability, String name, float[] connection, float bias) {
this.name = name;
this.propability = propability;
this.connection = connection;
this.bias = bias;
}
//more code
}
我不得不有点不同意:
private float connection[];
private float bias;
第一个(数组)是参考类型。换句话说:指向某个内存区域的(潜在)指针。明显地: 只要该指针指向null
(“无处”),没有extra需要内存。
但请不要误会,您的对象本身需要适合内存。含义:当你实例化一个新的Neuron
对象,那么 JVM 会准确地请求存储 Neuron 对象所需的内存量。这意味着:分配了一些内存来容纳该数组引用,当然:您的内存float原始值,它们都会立即分配。
在该成员字段中存储的是 0、100.00 还是 10394.283 并不重要:因为 JVM 确保您有足够的内存来容纳所需的位和字节。
因此:当你真的有millions对于对象,对象中的每个浮点字段都会添加 32 位。无论该领域内的价值来自何处。
当然,如果您的数组稍后将保存 5、10 或 1000 个条目,那么这将占据您的大部分内存消耗。但最初,当你创建数百万个“空”时Neuron
对象,您必须为类中存在的每个字段“付费”。
含义:当只有十分之一时Neuron
对象将需要这两个字段,那么你could决定:
- A
BaseNeuron
不具有全部 4 个字段的类
- 一个或多个从该类派生的类,添加它们需要的字段
另请注意,从设计角度来看,这也可能是更好的选择:“空”值始终意味着:需要额外的代码来处理该问题。意思是:如果该数组可以为空...那么当然,处理该字段的所有代码都必须在使用该数组之前检查该数组是否为空。比较一下:一个没有该数组的类,与一个包含该数组的类know该数组始终已设置并可供使用。
我并不是说你绝对必须改变你的设计,但正如所解释的:你可以减少你的内存占用,and这样做可以让你的设计更加清晰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)