引用类型笔记

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

 

以上是关于引用类型笔记的主要内容,如果未能解决你的问题,请参考以下文章

引用类型笔记

一篇笔记整理JVM工作原理

一篇笔记整理JVM工作原理

一篇笔记整理JVM工作原理

[javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程

内存管理笔记