假设我有一个Java类,它有100K的方法代码,包含NO变量,但只有20个字节的属性。
我从这个类中实例化了1000个对象。
我消耗了100,000K的内存吗?或者只有100K +(20bytes * 1000)?还是别的什么呢?
答案 0 :(得分:10)
加载类本身的内存占用量大致与代码大小相对应,但不会为类的每个实例复制代码。实例只需要与实例属性一样多的内存+管理对象实例本身的一些开销。
答案 1 :(得分:2)
以下是确定Java中对象的内存使用情况的一般指南: http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
我怀疑方法定义产生的内存使用量是固定的,(可能在加载类时放入permgen空间),而不是与实例数成比例。
答案 2 :(得分:0)
您将仅实例化对象的“变量”部分,因此只有属性(我猜这里和那里有几个字节的开销)。你后面的猜测是正确的。
答案 3 :(得分:0)
尝试使用jvisualvm(在JDK中)附加并告诉我们你看到了什么。