考虑以下两段 Java 代码:
Integer x=new Integer(100);
Integer y=x;
Integer z=x;
System.out.println("Used memory (bytes): " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
在我的系统上测试时,内存使用情况为:已使用内存(字节):287848
以及
int a=100;
int b=a;
int c=a;
System.out.println("Used memory (bytes): " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
在我的系统上测试时,内存使用情况如下: 使用的内存 (字节): 287872
以下是相关内容:
Integer x=new Integer(100);
System.out.println("Used memory (bytes): " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
并且
int a=100;
System.out.println("Used memory (bytes): " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
在上述两种情况下,在我的系统上测试时,内存使用情况完全相同:已用内存(字节):287872
该语句
System.out.println("Used memory (bytes): " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
将显示目前使用的总内存 [总可用内存-当前可用内存](以字节为单位)。
我通过上述方法曾验证过,在第一个情况下内存使用量(287848)较低,而在第二个情况下(287872)则更高,而在其余两种情况下,它们完全相同(287872)。当然,并且显然应该如此,因为在第一个情况下,y和z包含x中保存的引用的副本,它们全部(x、y和z)指向同一/共同的对象(位置),这意味着第一个情况比第二个情况更好和更合适,在其余两种情况下,存在具有完全相同的内存使用量(287872)的等价语句。如果是这样的话,那么在Java中使用基本数据类型应该是无用和可避免的,尽管它们基本上是为了更好地利用内存和CPU而设计的。那么为什么Java中会存在基本数据类型呢?
已经在此处发布了与此类似的问题,但它没有这样的情况。
Integer
必须比一个int
使用更多的内存。就是这样。 - Matt Ball