引用类型笔记
Posted Steve_Nash
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引用类型笔记相关的知识,希望对你有一定的参考价值。
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<String> wr = new WeakReference<String>(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
以上是关于引用类型笔记的主要内容,如果未能解决你的问题,请参考以下文章