博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
引用类型笔记
阅读量:4325 次
发布时间:2019-06-06

本文共 1073 字,大约阅读时间需要 3 分钟。

java在运行程序的时候涉及到了——>

寄存器:JVM内部的虚拟寄存器,存取速度非常快,程序不可控。(所以,大概是不用掌握的)

栈区:用来存放局部变量

堆区:保存动态创建的一些数据

静态区:保存一些静态数据

Person p = new Person();这条代码发生了什么?

首先在栈内存中为p分配一块空间,然后将Person对象在堆内存中的地址赋值给栈中的p,通过p就看找到堆中的对象。

所以如果System.out.println(p);打印出来会是Person在堆中的地址。

 

强引用:平常接触最多的就是强引用,绝对不会被回收。

软引用:可用来制作缓存,对用常用的数据,敏感的数据,不需要经常获取,如图片缓存。只有在内存不够的时候才会回收。

弱引用:常用于map数据结构中引用占用内存空间较大的对象。gc立刻回收。

虚引用:主要用来跟踪对象被垃圾回收器回收的状态。和软、弱的区别是必须和引用队列联合使用。当一个虚引用指向的对象被回收之后,自己就会被加入到引用队列中,用作记录该引用指向的对象已被销毁。

 

//        String str = "Steve_nash learn java"; //常量池中的属于强引用,不能回收        String str = new String("Steve_nash learn java"); //堆中的可以        WeakReference
wr = new WeakReference
(str); System.out.println("before gc , str = " + wr.get()); str = null; System.gc(); System.out.println("after gc , str = " + wr.get());

因为常量池中的属于强引用,不会被回收,所以结果是:

before gc , str = Steve_nash learn java

after gc , str = Steve_nash learn java

而堆中的可以,所以输出是:

before gc , str = Steve_nash learn java

after gc , str = null

 

转载于:https://www.cnblogs.com/i-love-kobe/p/5904916.html

你可能感兴趣的文章
初识JavaScript
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
Testing your Xamarin app on Android device
查看>>
丢失控制文件恢复实验记录--4(在线日志文件没有损坏,归档日志丢失,直接重建控制文件(跟踪控制文件trace是旧的情况))...
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
C程序之修改Windows的控制台颜色(转载)
查看>>
自定义滚动条
查看>>
[QT][待解决问题]对话框ui载入卡顿问题
查看>>
jquery中单选选中及清除选中状态
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
为啥程序会有bug?
查看>>