强引用和弱引用: 我们已经知道OC中的内存管理是通过“引用计数器”来实现的.一个对象的生命周期取决于它是否还被其他对象引用(是否retainCount=0).但在有些情况下,我们并不希望对象的销毁时间由是否被其他对象引用来决定,而是这个对象本该是什么时候销毁就什么时候被销毁.这时,我们得引入“强引用”和“弱引用”的概念. 强引用:当前对象被其他对象引用时,会执行retain操作,引用计数器+1.当retainCount=0时,该对象才会被销毁.因为我们要进行对象的内存管理,所以这是默认的引用方式…
之前在看深入理解Java虚拟机一书中第一次接触相关名词,但是并不理解,只知道Object obj = new Object()类似这种操作的时候,obj就是强引用.强引用不会被gc回收直到gc roots不可达时.而对其他三个名词并不清楚,因为并没有被真正使用过.通过查看软引用,弱引用和虚引用的源码,可以看出这三个类都是继承自Reference. 一 概念 1.1软引用(SoftReference) 我理解的软引用的意思是,即使引用对象没有被使用了,gc也不会马上回收,而是只有当堆内存空间不够时…
无论是通过引用计数法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判断对象是否存活都与“引用”有关, 相关资料:如何判断对象是否存活/死去 那么引用究竟是什么?让我们一起来看一下 在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Refrence).软引用(Soft Reference).弱引用(Weak Reference).虚引用(Phantom Reference)4种,其引用强度依次逐渐减弱. 强引用: 就是指在程序代码之中普遍存在…
在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用.也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.垃圾回收器一旦发现这些无用对象,就会对其进行回收.但是,在某些情况下,我们会希望有些对象不需要被立即回收,或者说从全局的角度来说没有立即回收的必要性.比如缓存系统的设计,在内存不吃紧或者说为了提高运行效率的情况下,一些暂时不用的对象仍然可放置在内存中,而不是立即进行回收. 为了满足这种要求,从JDK1.2版本开始,Java的设计人员把对…
小结: 1.不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块. 2.垃圾收集器能决定是否一个对象还是可访问的:任何被确定不可访问的对象将会被释放. https://zh.wikipedia.org/wiki/不可访问内存 在计算机科学中,不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块.类似的,一个不可访问对象是指没有可访问引用型指向的动态分配对象.通俗来说,不可访问内存是程序无法直接访问的动态内存,同时也无法通过指针指向一个可访问的起始对…
1. 强符号和弱符号 1.1 u-boot和kernel中的__weak指令 u-boot和kernel比较普遍地使用了__weak来定义函数. 在include\linux\compiler-gcc.h中__weak是这样定义的: #define __weak __attribute__((weak)) 1 GCC通过__attribute__((weak))指令定义的函数或变量称为弱符号(Weak Symbol),实际上这个指令大部分时候都是用来定义函数,很少用于定义变量. 编译器默认函数和…
关于强引用.软引用.弱引用.幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用. 在java语言中,除了原始数据类型(boolean.byte.short.char.int.float.double.long)的变量,其他所有都是所谓的引用类型,指向各种不同的对象.理解这些引用的区别,对于掌握java对象生命周期和JVM内部相关机制非常有帮助.也有助于更深刻的理解底层对象生命周期.垃圾收集机制等,…
来源:公众号:猿人谷 关于强引用.软引用.弱引用.幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用. 在java语言中,除了原始数据类型(boolean.byte.short.char.int.float.double.long)的变量,其他所有都是所谓的引用类型,指向各种不同的对象.理解这些引用的区别,对于掌握java对象生命周期和JVM内部相关机制非常有帮助.也有助于更深刻的理解底层对象生命…
以下内容摘自<深入理解Java虚拟机 JVM高级特性与最佳实践>第2版,强烈推荐没有看过的同学阅读,读完的感觉就是"原来学的都是些什么瘠薄东西(╯‵□′)╯︵┴─┴" 在JDK1.2以前,Java中的引用的定义很传统:如果 reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用.这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些"食之无味,弃之可惜"的对象就显得…
JVM引用 我们希望能描述这样一类对象: 当内存空间还足够时,则能保留在内存中:如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象. -[既偏门又非常高频的面试题]强引用.软引用.弱引用.虚引用有什么区别?具体使用.场景是什么? 在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference) .弱引用(Weak Reference) 和虚引用(Phantom Reference) 4种,这4种引用强度依…