JAVA面经总结:二(进阶)

106 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


6.G1收集器,牛逼,即 将jvm的堆区,划分为大小相等的region,remembered Set (referrence counting)

分为以下4各阶段:

初始标记(GCroots)
并发标记
最终标记
筛选回收
1 .分代收集:仍然有分代的概念,不需要其他收集器配合,独立管理整个GC堆。
2 .空间整合:从整体看,是基于“标记-整理”算法实现的,从局部(两个Region之间)看是基于“复 制”算法的。在运行期间不会产生内存碎片。
3 .可预测的停顿:G1跟踪各个Region里垃圾堆积值的价值大小,维护一个优先级队列,每次根据允许 的时间,优先回收价值最大的Region。(这也是Garbage First的由来)

虚拟机GC参数设置

http://unixboy.iteye.com/blog/174173
-Xms   
-Xmx   JVM 最大内存
-Xmn   年轻代大小

-XX:SuvirorRatio=8  eden:survivor = 8:1
-XX:PretenureSizeThreshold   设置大对象阈值,超过,则直接分配到老年代 只对 parnew 和Serail 收集器有效
-XX:MaxPretenuringThreshold 设置晋升old的阈值  即age的max

-XX:+UseParNewGC:
-XX:+UseG1GC

eden --> survivor age:1
minor GC, age ++
if age >= 15 ----> Old Generation

Class:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-apc9xN8D-1659353420518)(img.blog.csdn.net/20160912192…)]

1.Magic Num :0xCAFFEBABE
2.constant_pool :

	1. literal
	2. reference name

底层进阶:

线程实现

1.使用内核线程实现(KLT)。由内核分配,内核Scheduler调度。 但一般用LWP(轻量级进程),即KLT的一种接口。(user mode ,kernel mode切换消耗资源)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sWiemdJZ-1659353420519)(img.blog.csdn.net/20160912192…)]

2.使用用户线程实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heRzABQA-1659353420519)(img.blog.csdn.net/20160912192…)]

3.LWP和用户线程混合 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTCbbG93-1659353420519)(img.blog.csdn.net/20160912192…)] SunJdk中用LWP(win,linux)

线程调度(java,抢占式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ST5mHEbw-1659353420520)(img.blog.csdn.net/20160912192…)]

常见集合原理源码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hW7PYpoR-1659353420520)(img.blog.csdn.net/20160912192…)]

Map系: HashMap,LinkedHashMap,TreeMap, WeakHashMap, EnumMapConcurrentHashMap

List系:ArrayList, LinkedList, Vector, Stack

Set系:HashSet, LinkedHashSet, TreeSet