0
点赞
收藏
分享

微信扫一扫

c语言中“qsort函数”和“结构体成员访问变量”

花海书香 2024-09-27 阅读 13

1.判断是否是存活对象?

1.1 引用计数算法

注意:引用计数算法存在的问题:对象循环引用

1.2 可达性分析算法

 

1.3.Java 中的四种引用类型
1.3.1.强引用(Strong Reference) 

强引用 :

Object strongReference =new Object();

如果强引用对象不使用时,需要弱化从而使GC能够回收。

强引用弱化方式1:

strongReference =null;
public void clear(){
    modCount++;
    // clear to let Gc do its work
    for(inti=0;i<size; i++)
        elementDatali]=null
    size = 0;
}

强引用弱化方式2:

public void test(){
    Object strongReference =new object();
    //省略其他操作
}
1.3.2.软引用(Soft Reference)

创建软引用,可以使用Soft Reference

//定义和访问软引用

//强引用
String strongReference = new String("abc");

// 软引用
String str = new String("abc");
SoftReference<String>softReference = new SoftReference<String>(str);

// 访问软引用
softReference.get();
//回收软引用

//软引用
String str = new String("abc");
SoftReference<string>softReference = new SoftReference<>(str);

str = null;

// NotifyGC
System.gc();

try {
    byte[]buff1 = new byte[900000000];// 内存充沛
    // byte[]buff2 = new byte[900000000];// 内存不足
catch(Error e){
    e.printstackTrace();
}
System.out.println(softReference.get());//abc 或null
1.3.3.弱引用(Weak Reference)

创建弱引用,使用 WeakReference 

String str = new String("abc");
SoftReference<string>softReference = new SoftReference<>(str);

str = null;

// NotifyGC
System.gc();

// 一旦发生GC,弱引用一定会被回收
System.out.println(weakReference.get());
1.3.4.虚引用(Phantom Reference) 
1.3.5.小结

 

2.垃圾收集算法

2.1.分代收集理论

目前主流 JvM 虚拟机中的垃圾收集器都遵循分代收集理论:

  • 弱分代:绝大多数对象都是朝生夕灭
  • 强分代:经历越多次垃圾收集过程的对象,越难以回收,难以消亡

按照分代收集理论设计的“分代垃圾收集器”,所采用的设计原则:
        收集器应该将 Java 堆划分成不同的区域,然后将回收对象依据其年龄(年龄即对象经历过垃圾收集过程的次数)分配到不同的区域存储。

2.1.1.分代存储
2.1.2.分代收集
2.2.垃圾收集算法
2.2.1.标记-清除算法(Mark-Sweep)

 

2.2.2.标记-复制算法(Copying )

 

2.2.3.标记-整理算法(Mark-Compact )

 

2.3.综上所述

3.垃圾收集器

3.1.Serial 收集器(新生代)
3.2.Serial Old 收集器(老年代)
3.3.ParNew 收集器(新生代)
3.4.Parallel Scavenge 收集器(新生代)
3.5.Parallel Old 收集器(老年代)
3.6.CMS 收集器(老年代)
3.7.G1收集器(老年代)

 

举报

相关推荐

0 条评论