`
w54653520
  • 浏览: 23167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

list = null 和 new ArrayList() 内存调用

 
阅读更多

代码一 

Java代码 

List list = new ArrayList();  



代码二 

Java代码 

List list = null;  


如果有10000个类似于list的对象,代码一比代码二会多占多少内存?

 

 

public class TestNullAndNew
{

    /**
     * @param args
     *            .
     */
    @SuppressWarnings({ "rawtypes", "unused" })
    public static void main(String[] args)
    {
        long freeMemory = Runtime.getRuntime().freeMemory();
        System.out.println("系统空余内存(KB) : " + freeMemory);
        System.out.println("系统总内存(KB) : " + Runtime.getRuntime().totalMemory());
        for (int i = 0; i < 10000; i++)
        {
            List list = new ArrayList();
        }
        long freeMemoryNew = Runtime.getRuntime().freeMemory();
        System.out.println("使用new之前的空余内存(KB):" + freeMemory);
        System.out.println("使用new之后的空余内存(KB) : " + freeMemoryNew
                + "\nnew的内存使用(KB) : " + (freeMemory - freeMemoryNew));

        for (int i = 0; i < 10000; i++)
        {
            List list = null;
        }
        long freeMemoryNull = Runtime.getRuntime().freeMemory();
        System.out.println("使用null之前的空余内存(KB):" + freeMemoryNew);
        System.out.println("使用null之后的空余内存(KB): " + freeMemoryNull
                + "\nnull的内存使用(KB) : " + (freeMemoryNew - freeMemoryNull));
        System.out.println("totalMemory(KB) : "
                + Runtime.getRuntime().totalMemory());
    }
}

 

 

运行结果:

系统空余内存(KB) : 15940336

系统总内存(KB) : 16252928

使用new之前的空余内存(KB):15940336

使用new之后的空余内存(KB) : 15216704

new的内存使用(KB) : 723632

使用null之前的空余内存(KB):15216704

使用null之后的空余内存(KB): 15216704

null的内存使用(KB) : 0

totalMemory(KB) : 16252928

 

 

结论: 
List list = null;  不会占用内存。 
代码1执行10000次占用24.944M内存。 

具体执行结果可能跟操作系统与主机配置和JDK版本有关,稍有偏差。 

我们应该尽量避免创建对象,可以考虑使用单例模式。关于JAVA性能方面推荐《Effective Java》中文版 第2

分享到:
评论

相关推荐

    jni操作arraylist对象

    ArrayList是Java集合框架中的一个重要类,它实现了List接口,用于存储可变大小的有序对象列表。ArrayList通过数组来存储元素,因此可以快速访问任意位置的元素,但插入和删除元素时可能需要移动其他元素,这可能导致...

    用C语言模拟ArrayList

    需要注意的是,虽然C语言没有内置的ArrayList,但我们可以利用动态内存分配和结构体来创建自己的实现,从而获得与高级语言相似的功能。在实际应用中,我们还需要考虑错误处理、线程安全以及优化等问题,以确保代码的...

    Java中ArrayList的使用方法以及与vector的对比

    ArrayList list = new ArrayList(); for (int i = 0; i ; i++) { list.add(i); } list.remove(5); for (int i = 0; i ; i++) { list.add(i + 20); } ``` 这个示例中,我们首先创建了一个 ArrayList 对象,然后...

    String[] list 相互转化

    List&lt;String&gt; list = new ArrayList(); list.add("1"); list.add("2"); // 获取 List 大小并创建一个 String 类型的数组 final int size = list.size(); String[] arr = (String[]) list.toArray(new String[size])...

    详解Java去除json数据中的null空值问题

    List&lt;Object&gt; newList = new ArrayList(); for (Object item : jsonArr) { Object newObj = traverseJson(item); if (newObj != null) { newList.add(newObj); } } return newList.size() &gt; 0 ? newList : ...

    java List、Set与Array之间的相互转换

    List&lt;String&gt; list = new ArrayList(Arrays.asList(array)); ``` - **List转Array**: 要将List转换回Array,你可以使用`toArray()`方法。首先,你需要创建一个目标类型的空数组,然后调用`toArray()`方法传入这个...

    数组模仿ArrayList

    在Java编程语言中,ArrayList是集合框架中的一种重要数据结构,属于List接口的实现类。它内部基于动态数组实现,提供了灵活的增删改查功能,同时保持了元素的有序性。本篇将深入探讨如何使用数组来模仿ArrayList的...

    java万能DAO

    List&lt;HashMap&gt; list = new ArrayList(); Connection conn = null; PreparedStatement query = null; ResultSet rs = null; try { conn = DButil.getConn(); query = conn.prepareStatement(sql); this.set...

    list转换成string数组

    ArrayList&lt;String&gt; list = new ArrayList(); list.add("a1"); list.add("a2"); // 转换为String数组 String[] toBeStored = list.toArray(new String[list.size()]); // 打印结果 System.out.println...

    Excel POI读取封装(文件+示范代码)

    DataType stued=new StuEducationImpl(); if(e.isForeign()){ String[] data=(String[])stued.dealDataType(e,excelvalue); obj=convertDataType(data[1],data[0].toString().getClass()); datamap.put(e....

    二叉树的后序遍历(java代码).docx

    List&lt;Integer&gt; result = new ArrayList(); if (root == null) { return result; } postorderRecursive(root, result); return result; } private void postorderRecursive(TreeNode node, List&lt;Integer&gt; ...

    缓存一个list的内容进txt文件,Android

    List&lt;String&gt; dataList = new ArrayList(); dataList.add("数据1"); dataList.add("数据2"); // ... ``` 接下来,我们将list转换为字符串,便于写入TXT文件。这里可以使用Java的`join()`方法或自定义循环实现。使用...

    AIDL List传递 String传递(android studio)

    List&lt;String&gt; list = new ArrayList(); list.add("元素1"); list.add("元素2"); service.sendList(list); String receivedString = service.receiveString(); // 使用receivedString } ``` 在实际应用中,...

    个人信息助理系统

    List&lt;Person&gt; list = new ArrayList(); try { stmt = conn.prepareStatement(SQL4); rs = stmt.executeQuery(); while (rs.next()) { Person person = new Person(); person.setP_id(rs.getInt...

    Java中有关Null的9件事Java开发Java经验技巧

    例如,`List&lt;String&gt; list = new ArrayList(); list.add(null);`会在列表中添加一个`null`值。 8. **判空最佳实践**: 在处理可能为`null`的引用时,建议在访问其成员或方法前进行检查。可以使用`if (object != ...

    64-Java单向链表的逆序1

    3. 在递归函数中,将current的next指针指向前一个节点(即prev),然后将current和其next节点更新为prev和current.next,递归调用自身,直到current为null。 迭代方法: 1. 同样设置prev、current和next指针,但...

    复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用

    DataSource htmlDs = new ByteDataSource(this.text==null?"".getBytes():this.text.getBytes()); // 指定文本域,创建DataSource DataHandler htmlDh = new DataHandler(htmlDs); htmlPart.setDataHandler(htmlDh);...

    Axis动态调用webService

    List&lt;Object&gt; inputs = new ArrayList(); // ... } } ``` Axis 动态调用 Web 服务的步骤 1. 首先,需要解析 WSDL 文件以获取服务的描述信息。 2. 然后,使用 Axis 的 Parser 对象来解析 WSDL 文件。 3. 获取服务...

    java中dao层反射使用.doc

    list = new ArrayList(); this.getStandardManager(url); Field[] fields = cs.getDeclaredFields(); for (int i = 0; i ; i++) { Field field = fields[i]; list.add(field.getName()); } } // 获取实体...

Global site tag (gtag.js) - Google Analytics