代码一
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版
相关推荐
ArrayList是Java集合框架中的一个重要类,它实现了List接口,用于存储可变大小的有序对象列表。ArrayList通过数组来存储元素,因此可以快速访问任意位置的元素,但插入和删除元素时可能需要移动其他元素,这可能导致...
需要注意的是,虽然C语言没有内置的ArrayList,但我们可以利用动态内存分配和结构体来创建自己的实现,从而获得与高级语言相似的功能。在实际应用中,我们还需要考虑错误处理、线程安全以及优化等问题,以确保代码的...
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 对象,然后...
List<String> list = new ArrayList(); list.add("1"); list.add("2"); // 获取 List 大小并创建一个 String 类型的数组 final int size = list.size(); String[] arr = (String[]) list.toArray(new String[size])...
List<Object> newList = new ArrayList(); for (Object item : jsonArr) { Object newObj = traverseJson(item); if (newObj != null) { newList.add(newObj); } } return newList.size() > 0 ? newList : ...
List<String> list = new ArrayList(Arrays.asList(array)); ``` - **List转Array**: 要将List转换回Array,你可以使用`toArray()`方法。首先,你需要创建一个目标类型的空数组,然后调用`toArray()`方法传入这个...
在Java编程语言中,ArrayList是集合框架中的一种重要数据结构,属于List接口的实现类。它内部基于动态数组实现,提供了灵活的增删改查功能,同时保持了元素的有序性。本篇将深入探讨如何使用数组来模仿ArrayList的...
List<HashMap> list = new ArrayList(); Connection conn = null; PreparedStatement query = null; ResultSet rs = null; try { conn = DButil.getConn(); query = conn.prepareStatement(sql); this.set...
ArrayList<String> list = new ArrayList(); list.add("a1"); list.add("a2"); // 转换为String数组 String[] toBeStored = list.toArray(new String[list.size()]); // 打印结果 System.out.println...
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....
List<Integer> result = new ArrayList(); if (root == null) { return result; } postorderRecursive(root, result); return result; } private void postorderRecursive(TreeNode node, List<Integer> ...
List<String> dataList = new ArrayList(); dataList.add("数据1"); dataList.add("数据2"); // ... ``` 接下来,我们将list转换为字符串,便于写入TXT文件。这里可以使用Java的`join()`方法或自定义循环实现。使用...
List<String> list = new ArrayList(); list.add("元素1"); list.add("元素2"); service.sendList(list); String receivedString = service.receiveString(); // 使用receivedString } ``` 在实际应用中,...
List<Person> list = new ArrayList(); try { stmt = conn.prepareStatement(SQL4); rs = stmt.executeQuery(); while (rs.next()) { Person person = new Person(); person.setP_id(rs.getInt...
例如,`List<String> list = new ArrayList(); list.add(null);`会在列表中添加一个`null`值。 8. **判空最佳实践**: 在处理可能为`null`的引用时,建议在访问其成员或方法前进行检查。可以使用`if (object != ...
3. 在递归函数中,将current的next指针指向前一个节点(即prev),然后将current和其next节点更新为prev和current.next,递归调用自身,直到current为null。 迭代方法: 1. 同样设置prev、current和next指针,但...
DataSource htmlDs = new ByteDataSource(this.text==null?"".getBytes():this.text.getBytes()); // 指定文本域,创建DataSource DataHandler htmlDh = new DataHandler(htmlDs); htmlPart.setDataHandler(htmlDh);...
List<Object> inputs = new ArrayList(); // ... } } ``` Axis 动态调用 Web 服务的步骤 1. 首先,需要解析 WSDL 文件以获取服务的描述信息。 2. 然后,使用 Axis 的 Parser 对象来解析 WSDL 文件。 3. 获取服务...
list = new ArrayList(); this.getStandardManager(url); Field[] fields = cs.getDeclaredFields(); for (int i = 0; i ; i++) { Field field = fields[i]; list.add(field.getName()); } } // 获取实体...