zoukankan      html  css  js  c++  java
  • 引用类型笔记

    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

  • 相关阅读:
    IoC容器设计
    乐观锁(Optimistic Lock)
    file,path,uri互相转换
    QGraphicsView的paintEvent双缓存绘画
    简单的串口通信程序控制光源
    Qt--QMdiArea和QMdiSubWindow的基本用法
    Qt--支持鼠标拖动来移动内容的QScrollArea视窗
    快速排序算法记录
    结构体在内存中的对齐规则
    求N个数的数组中第K大的数的值
  • 原文地址:https://www.cnblogs.com/i-love-kobe/p/5904916.html
Copyright © 2011-2022 走看看