先来张简单的图:

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

望大家指出理解有误的地方。

~——————————分割————————~

你得喜欢与回复是我最大的动力— —

java数据段 静态区_回顾一下基础,关于栈与堆,常量池,静态区相关推荐

  1. 动态区域(栈、堆)、静态存储区(数据段和程序段)

    动态区域(栈.堆).静态存储区(数据段和程序段) 内容收集比较混乱,仅供参考 版本一:      堆 1 类成员变量存放在堆区,所有类的实例和数组都是在堆上分配内存的,堆内存由存活和死亡的对象,空闲碎 ...

  2. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  3. java数据段 静态区_linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...

    一)概述 .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储. .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说 ...

  4. 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

    方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆. 1.此区域是线程共享的.储存已加载的类型信息.常 ...

  5. java中的静态变量的作用域_Java基础学习03-变量、常量、作用域

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; Java语言支 ...

  6. java常量池方法区_Java方法区和运行时常量池溢出问题分析

    运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池 ...

  7. 串口发送tcp数据 源端口号_三分钟基础知识:用动画给面试官解释 TCP 三次握手过程...

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐. 对于这部分掌握以及 TC ...

  8. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  9. java 字符串池 原理_《Java虚拟机原理图解》1.2.2、Class文件中的常量池详解(上)...

    注意: 对于某个类而言,其class文件中至少要有两个CONSTANT_Class_info常量池项,用来表示自己的类信息和其父类信息.(除了java.lang.Object类除外,其他的任何类都会默 ...

最新文章

  1. acwing算法题--看图做题
  2. Android自定义属性
  3. 转]Window, Linux动态链接库的分析对比
  4. [WCF]利用net.tcp傳輸協定來建置WCF Service
  5. Flex与外部的数据通信
  6. 20000赫兹的声音试听下载_好听又不贵,DLC球顶双面镀铍动圈:七赫兹i99
  7. Pytorch采坑记录:DDP加载之前的checkpoint后loss上升(metric下降)
  8. python面试题之解释一下python的and-or语法
  9. Linux命令:修改文件权限命令chmod、chgrp、chown详解
  10. linux安装通用plsql数据库,linux centOs中安裝好數據庫,客戶端用plsql連接oracle
  11. 人工智能之启发式搜索算法
  12. oracle查询表锁定以及解锁方法
  13. pytorch dataloader参数解析
  14. 云计算发展现状及未来趋势
  15. qt 绘图工具(一)
  16. Springboot 之 HandlerMethodArgumentResolver 运用
  17. Could not find multidex.jar (com.android.support:multidex:1.0.2).
  18. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之一环境搭建跑起来模拟器!
  19. ORA-02292_主表在有子表外键约束的情况,如何快速批量删除和插入数据?
  20. 【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点

热门文章

  1. 疫情与资本寒冬双重危机下,智领云为何能拿到数千万融资?
  2. 如何给女朋友解释什么是撞库、脱库和洗库?
  3. 边缘计算精华问答 | 5G是否会“逼退”4G?
  4. python取的键不存在_Python3基础 dict get 在查询不存在的键时,返回指定的内容
  5. 苹果xr如何截屏_苹果手机自带的三种截屏技巧,你知道几个?现在知道还不迟...
  6. python封装c接口_用C为python3.1封装mysql接口(一)
  7. mysql与oracle链接超时_数据库连接超时问题(求解)
  8. “Host ‘xxx’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”
  9. Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)
  10. Nacos 集群集成SpringBoot2.x 微服务_02