`
w54653520
  • 浏览: 22547 次
  • 性别: 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

分享到:
评论

相关推荐

    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...

    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....

    个人信息助理系统

    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源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用

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

    Java测试题2答案

    B List myList=new ArrayList(); C ArrayList myList=new List(); D List myList=new List(); 2.paint()方法使用哪种类型的参数? A A Graphics B Graphics2D C String D Color...

    带注释的Bootstrap.java

    List&lt;Repository&gt; repositories = new ArrayList(); String[] repositoryPaths = getPaths(value); for (String repository : repositoryPaths) { // Check for a JAR URL repository try { @...

    HttpClient以及获取页面内容应用

    List&lt;NameValuePair&gt; formparams = new ArrayList(); formparams.add(new BasicNameValuePair("username", "admin")); formparams.add(new BasicNameValuePair("password", "123456")); ...

    投票系统,基于mvc开发,jsp+servlet+mysql

    List&lt;Integer&gt; list = new ArrayList(); int temp; for (String answer : answers) { temp = Integer.parseInt(answer); list.add(temp); } int tid = Integer.parseInt(sid); UserBean ub = ...

    ihrm_system.zip

    List&lt;User&gt; list = new ArrayList(); System.out.println(sheet.getLastRowNum()); for (int rowNum = 1; rowNum&lt;= sheet.getLastRowNum() ;rowNum ++) { Row row = sheet.getRow(rowNum);//根据索引获取每一个...

    数据库测试test.sql

    //List&lt;User&gt; userList = new ArrayList(); //跳转到show.jsp显示数据 request.setAttribute("userId",userId); request.setAttribute("minAge",strAge); request.setAttribute("ulist",userList); request....

    java发送短信之AT指令

    短信内容的存储类 /*** * CommonSms 短信用于全局变量 */ public class CommonSms{ /** id */ private int id; /**短信内容*/ private String smstext;... CommonSms cs=new CommonSms(); ...

    一个适合新手学习的电商项目

    return new ArrayList(); } // 把json转换成商品列表 try { List&lt;CartItem&gt; list = JsonUtils .jsonToList(cartJson, CartItem.class); return list; } catch (Exception e) { e.printStackTrace(); } ...

    springmybatis

    sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); }catch(Exception e){ e.printStackTrace(); } } public static SqlSessionFactory getSession(){ return sqlSessionFactory; } ...

    Java Oracle分页处理

    List&lt;PageBean&gt; list = new ArrayList(); newgetResouce newgetresouce = new newgetResouce(); //通过显示页面传递一个pagetype对象和PaginationBean对象 Page page = new Page(request.getParameter(...

    json工具类

    List&lt;BasicNameValuePair&gt; params = new ArrayList(); params.add(new BasicNameValuePair("yhid",getUser().getYhid())); params.add(new BasicNameValuePair("lon", lon)); params.add(new BasicNameValuePair...

    新浪微博授权代码及测试结果.zip

    ArrayList&lt;NameValuePair&gt; postParams=new ArrayList(); postParams.add(new BasicNameValuePair("source",CONSUMER_KEY)); //封装入APP Key try { HttpPost httpRequest = new HttpPost(httpUrl); ...

    滑动启动页

    views = new ArrayList(); // 初始化引导图片列表 views.add(inflater.inflate(R.layout.what_new_one, null)); views.add(inflater.inflate(R.layout.what_new_two, null)); views.add(inflater.inflate...

    ViewPagerFragment滑动切换

    public List&lt;Fragment&gt; fragments = new ArrayList(); public String hello = "hello "; private ImageView mTab1, mTab2, mTab3, mTab4; private ImageView mTabImg; private int currIndex = 0;// 当前页卡...

    android 五子棋源码

    imageViews = new ArrayList(); //初始化图片资源 for(int i = 0; i; i++){ ImageView imageView = new ImageView(this); imageView.setImageResource(imageResId[i]); imageView.setScaleType...

Global site tag (gtag.js) - Google Analytics