山西专业网站建设价目,商标设计logo图案需要注册吗,自己创建平台要多少钱,多行业品牌企业公司网站模板垃圾回收
一个对象如果不再使用#xff0c;需要手动释放#xff0c;否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收#xff0c;而需要程序员编写代码进行回收的方式为手动回收。
内存泄漏指的是不再使用的对象在系统中未被回收#xff0c;内存泄漏的积累可能…垃圾回收
一个对象如果不再使用需要手动释放否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收而需要程序员编写代码进行回收的方式为手动回收。
内存泄漏指的是不再使用的对象在系统中未被回收内存泄漏的积累可能会导致内存溢出
java中为了简化对象的释放引入了自动的垃圾回收garbage collection简称GC机制。通过垃圾回收器来对不再使用的对象完成自动的回收垃圾回收器主要负责对堆上的内存进行回收。其他语言例如c#pythongo都拥有自己的垃圾回收器
定位垃圾的两种方法
引用计数法
一个对象被引用了一次在当前对象头上递增一次引用次数如果这个对象的引用次数为0代表这个对象可回收。
当对象间出现了循环引用的话引用计数法会失效
可达性分析算法
扫描堆中的对象看是否能够沿着GC Root对象为起点的引用链找到该对象找不到表示可以回收
哪些对象可以作为GC Root
虚拟机栈栈帧中的本地变量表中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNINative方法引用的对象
垃圾清除算法
标记清除算法
标记和清除
1.根据可达性分析算法得出的垃圾进行标记
2.对这些标记为可回收的内容进行垃圾回收
优点清理速度较快
缺点碎片化严重内存不连贯
标记整理算法
和标记清除算法前面都一致但多了一步对象移动内存位置使得内存连续
优点不会有内存碎片
缺点牺牲了性能和速度
复制算法
将内存空间一分为二每次清除和回收时都将剩下的移动到另一端。
优点在垃圾对象多的情况下效率较高。清理后内存无碎片
缺点分配的两块内存空间在同一时刻只能使用一般内存使用率较低
分代收集算法
在java8时堆被分为了两份:新生代和老年代1:2
对于新生代内部又被分为了三个区域
eden区新生的对象都分配到这里
survivor区分着from和to
eden,from,to(8:1:1) MinorGCMixedGCFullGC的区别是什么
MinorGCyoungGC发生在新生代的垃圾回收暂停时间短STW
MixedGC新生代老年代部分区域的垃圾回收G1收集器特有
FullGC新生代老年代完整垃圾回收展厅时间长STW应尽量避免
垃圾回收器 G1垃圾回收器机制 强引用软引用弱引用虚引用的区别
强引用只有所有GCRoots对象都不通过强引用该对象该对象才能被垃圾回收
软引用仅有软引用引用该对象时在垃圾回收后内存如果仍然不足时会再次发出垃圾回收
弱引用仅有弱引用引用该对象时在垃圾回收时无论内存是否充足都会回收弱引用对象
虚引用必须配合引用队列使用被引用对象回收时会将虚引用入队由Reference Handler线程调用虚引用相关方法释放直接内存