失效链接处理 |
jvm 21题 PDF 下载
本站整理下载:
相关截图:
主要内容:
2、jvm内存模型:
1. 每⼀个线程有⼀个⼯作内存,和主存独⽴;
2. ⼯作内存存放主存中变量的值的拷⻉;
3. 对于普通变量,⼀个线程中更新的值,不能⻢上反应在其他变量中;如果需要在其他线程中⽴即可⻅,需要使⽤volatile关键字;
4. volatile不能代替锁,⼀般认为volatile⽐锁性能好(不绝对),使⽤volatile的条件是语义是否满⾜应⽤;
5. 可⻅性:⼀个线程修改了变量,其他线程可以⽴即知道。
a. volatile;
b. synchronized(unlock之前,写变量值回主存);
c. final(⼀旦初始化完成,其他线程可⻅)。 3、java四引⽤:
1. 强引⽤:
强引⽤是使⽤最普遍的引⽤。如果⼀个对象具有强引⽤,那垃圾回收器绝不会回收它。当内存空间不⾜,Java虚拟机宁愿抛出
OutOfMemoryError错误,使程序异常终⽌,也不会靠随意回收具有强引⽤的对象来解决内存不⾜的问题。
2. 软引⽤:
如果内存空间不⾜了,就会回收这些对象的内存。只要垃圾回收器没有回收它,软引⽤可以和⼀个引⽤队列
(ReferenceQueue)联合使⽤,如果软引⽤所引⽤的对象被垃圾回收器回收,Java虚拟机就会把这个软引⽤加⼊到与之关联的引⽤队列
中。
3. 弱引⽤:
弱引⽤与软引⽤的区别在于:只具有弱引⽤的对象拥有更短暂的⽣命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程
中,⼀旦发现了只具有弱引⽤的对象,不管当前内存空间⾜够与否,都会回收它的内存。
弱引⽤可以和⼀个引⽤队列(ReferenceQueue)联合使⽤,如果弱引⽤所引⽤的对象被垃圾回收,Java虚拟机就会把这个弱引
⽤加⼊到与之关联的引⽤队列中。
4. 虚引⽤:
虚引⽤在任何时候都可能被垃圾回收器回收,主要⽤来跟踪对象被垃圾回收器回收的活动,被回收时会收到⼀个系统通知。虚
引⽤与软引⽤和弱引⽤的⼀个区别在于:虚引⽤必须和引⽤队列 (ReferenceQueue)联合使⽤。当垃圾回收器准备回收⼀个对象时,
如果发现它还有虚引⽤,就会在回收对象的内存之前,把这个虚引⽤加⼊到与之关联的引⽤队列中。
4、GC算法分类:
1. 引⽤计数法(没有被java采⽤):
a. 原理:对于⼀个对象A,只要有任何⼀个对象引⽤了A,则A的引⽤计数器就加1,当引⽤失效时,引⽤计数器就减1,只要对
象A的引⽤计数器的值为0,则对象A就会被回收。
b. 问题:
i. 引⽤和去引⽤伴随加法和减法,影响性能;
ii. 很难处理循环引⽤。
2. 标记清除法:
a. 原理:现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。⼀种可⾏的实现是,
在标记节点,⾸先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引⽤的垃圾对象。然后在
清除阶段,清除所有未被标记的对象。
b. 问题:
i. 标记和清除两个过程效率不⾼,产⽣内存碎⽚导致需要分配较⼤对象时⽆法找到⾜够的连续内存⽽需要触发⼀次GC操 作。
3. 标记压缩法:
a. 原理:适合⽤于存活对象较多的场合,如⽼年代。它在标记-清除算法的基础上做了⼀些优化。标记阶段⼀样,但之后,将所
有存活对象压缩到内存的⼀端。之后,清除边界外所有的空间。
b. 优点:
i. 解决了标记- 清除算法导致的内存碎⽚问题和在存活率较⾼时复制算法效率低的问题。
4. 复制算法:
a. 原理:将原有的内存空间分为两块,每次只使⽤其中⼀块,在垃圾回收时,将正在使⽤的内存中的存活对象复制到未使⽤的
内存块中,之后清除正在使⽤的内存块中的所有对象,交换两个内存的⻆⾊,完成垃圾回收。
b. 问题:
i. 不适⽤于存活对象⽐较多的场合,如⽼年代。
5. 分代回收法:
a. 原理:根据对象存活周期的不同将内存划分为⼏块,⼀般是新⽣代和⽼年代,新⽣代基本采⽤复制算法,⽼年代采⽤标记整
理算法。 5、MinorGC & FullGC:
1. Minor GC通常发⽣在新⽣代的Eden区,在这个区的对象⽣存期短,往往发⽣GC的频率较⾼,回收速度⽐较快,⼀般采⽤复制-回
收算法。
2. Full GC/Major GC 发⽣在⽼年代,⼀般情况下,触发⽼年代GC的时候不会触发Minor GC,所采⽤的是标记-清除算法。
6、垃圾收集器:
1. Serial New收集器是针对新⽣代的收集器,采⽤的是复制算法;
|