ArrayList list = new ArrayList();
List list = new ArrayList();
这2行都是创建的ArrayList的对象,为什么占用的内存却不同
List list = new ArrayList();
这2行都是创建的ArrayList的对象,为什么占用的内存却不同
解决方案 »
- Oracle中java存储过程java.security.AccessControlException
- 一个简单的效率问题
- Java泛型Map<String,List<String>>问题
- 一个菜鸟的问题
- properties 问题
- 如何反射得到参数为接口的方法?
- javac -d *.java 对吗?
- 请问如何设置JTree中节点的交汇处的图标
- 如何在JPane中放图片?(在线等待)
- 下载了jbuilder5,是rar格式的,解开后有两个文件,一个是rsc-jb5.bin,一个是rsc-jb5.cue,据说这两个文件是刻光盘的,请问谁知道怎么刻?不会用这两个文件直接安装吧?谢谢!
- JTextarea的问题
- struts2上传文件问题
List list = new ArrayList()相当于List list=(List)new ArrayList();
只是转了一下型
ArrayList list = new ArrayList();
List list = new ArrayList();
这两条语句开辟的内存空间,取决于ArrayList的构造方法,而不是类型声明。
ArrayList是它的实现类,是一个用数组实现的List.
为什么内存不一样?你是怎么知道的?我也想知道。
Runtime.freeMemory()这样也行?你知道运行Runtime.freeMemory()这条语句占用了多少内存么?
然后你怎么计算呢?
汗,你要是用这个方法来判断两个大型应用占用的内存还可以,用他来比较这么细微的东西,不可能得到正确的结果的。更何况就算你啥也不干,内存也是随时在变化的,JVM本身就跑了很多东西。
反正是来上面俩个语句都加上这个语句,所以它所占的内存在两个语句中是一样的,可以不要管的。
import java.util.*;
public class RuntimeTest
{
public static void main(String[] args)
{
try
{
Runtime r = Runtime.getRuntime();
System.out.println(r.freeMemory());
List list = new ArrayList();
//ArrayList list = new ArrayList();
list.add(10);
System.out.println(r.freeMemory());
//System.out.println(list.size());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
List list = new ArrayList(); 这两个语句只是生成了两个对象,引用的是原jvm的内存空间,只有当你给这两个对象分配指向的位置时,才会对内存空间有影响,如list.add("test");
这时才会对内存有影响
对,如果不执行add操作他们占用的内存空间是一样的
但是如果使用List list = new ArrayList();的话,虚拟机只会创造一
个在仅拥有List中声明过的方法的实例,而ArrayList list = new ArrayList();
创造的实例还会拥有在ArrayList中的扩展方法和字段,两者占用内存自然
不同了,呵呵
你得到freeMemory只能说明你程序不同,毕竟变量类型不同都回导致占用内存不用是正常的。
而对于大规模数据量的时候,这种类型的不同导致的内存消耗不同是可以忽略不计的。你不信可以都放入10万个1K的String尝试一下。注意每次都要new String(),否则没有效果。
那么子类独有的方法和属性包括静态方法和属性,在多态是有可见与否的具体情况而定.那么2种情况下的初始化是不是一样的,不知道啊?
期待高人给出实证.至于楼上用RunTime这个我觉得不可取啊,先执行和后执行有分别,而且GC的实际回收还有特定的时间周期.
再者2者的内存区分本身细微,我觉得数据不可靠啊......
主要看一下,向上转型时可能产生的接口缩小。无论子类如何扩
展,用基类使用时,不可能比基类大。