美文网首页基础Android实用技术Android开发经验谈
回顾一下基础,关于栈与堆,常量池,静态区

回顾一下基础,关于栈与堆,常量池,静态区

作者: Jlanglang | 来源:发表于2017-01-04 23:59 被阅读370次

先来张简单的图:

1.jpg

------------------分割------------------------

栈内存:

1.操作比较快速.但是为私有.
2.线程之间不共享.所以存放一些基本数据类型,局部变量(方法走完就回收了),
3.对于引用数据类型的地址引用.

堆内存:

1.new出来的实例
2.成员变量的值(如果是基本数据类型,比如: int).个人感觉是包装成了引用数据类型(Integer,Float之类的).
3.线程间可以共享数据,不安全.
4.通过gc回收释放内存

静态区:

1.存放static修饰的各种.
2.一般是不会被回收的,所以使用static要特别注意,如果只是staitc修饰的只是一些基本数据类型,那么无所谓.如果是引用数据类型就要注意了.适时释放引用.
3.随着进程的结束而结束.

常量池

1.存放了基本数据类型的值.表
2.String表.比如String s ="123ab123",创建这个String会先在常量池的表里面找,如果有就直接引用,如果没有就会在常量池创建添加到表并引用.

-----------------------分割------------------------------

实战场景

1.adapter的数据刷新:

public class MainActivity extends AppCompatActivity {
    ...//无关代码省略
   private List data;//数据
   private MyAdapter adapter;//listview的adapter
   ...
    public void init(){
      adapter = new MyAdapter (data);
  }
    public void loadData(){
        //请求接口;
        //请求成功;
        //得到新的list数据newData;
        data = newData;
        adapter.notifyDataSetChanged();//通知adapter.
    }
}
public class MyAdapter extends BaseAdapter{
  private List adapterData;
  public  MyAdapter (List list){
        adapterData = list;
  }
  ......
}

上面这段代码,会发现刷新listview不成功.
如果把上面的代码稍微改一下.

public class MainActivity extends AppCompatActivity {
    ...//无关代码省略
   private List data;//数据
   private MyAdapter adapter;//listview的adapter
   ...
    public void init(){
      adapter = new MyAdapter (data);
  }
    public void loadData(){
        //请求接口;
        //请求成功;
        //得到新的list数据newData;
        data = newData;
        adapter.notifyDataSetChanged();//通知adapter.
    }
  public class MyAdapter extends BaseAdapter{
       ......
     public int getItemCount(){
      return data==null?0:data.size;
      }
  }    
}

把MyAdapter 写成MainActivity的内部类.就能刷新了.
二者的区别,仔细想一下就明白了,就是操作的地址值不同对象不同而已.

第一段代码的图:

2.jpg

第二段的代码的图

3.jpg

图画的有点搓,哈哈.
--------------------分割线--------------------------

再来个String创建的简单图:

4.jpg

望大家指出理解有误的地方。
~——————————分割————————~
你得喜欢与回复是我最大的动力— —

相关文章

  • 回顾一下基础,关于栈与堆,常量池,静态区

    先来张简单的图: ------------------分割------------------------ 栈内存...

  • 动态内存分配_C语言

    逻辑上的分区 栈区 堆区 静态区 常量区 代码区 代码区,常量区,静态区,堆区,栈区这个排列顺序按照地址由小到大排...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • 19·iOS 面试题·什么是 ARC ?(ARC 是为了解决什么

    前言 对于 iOS 内存分区有:栈区、堆区、静态区、全局区、常量区、代码区。对于静态区、全局区、常量区、代码区,对...

  • 内存介绍

    虚拟内存总体分五大区域,栈区(堆栈),堆区(托管堆),常量,静态(静态未初始化区,和静态初始化区)其他区域**栈区...

  • C# 内存分配和参数传递及面向对象之封装,继承

    虚拟内存总体划分为五大区域:栈区(堆栈),堆区(托管堆),常量,静态(静态初始化,静态未初始化),代码区 * 栈...

  • 线性表和队列

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区...

  • 内存管理

    首先,内存分为:栈区、堆区、全局区/静态区(存放全局变量和static静态变量)、常量区(存放字符串常量)、代码区...

  • 内存四区模型

    全局区 全局区分为:全局变量,静态变量,文字常量区 栈区 堆区 静态局部变量 栈的生长方向

  • 无标题文章

    --- ##1.内存分区 > * 堆区 > * 栈区 > * 全局(静态)区 > * 文字常量区 > * 程序代码...

网友评论

本文标题:回顾一下基础,关于栈与堆,常量池,静态区

本文链接:https://www.haomeiwen.com/subject/lljavttx.html