@@ -5778,13 +5778,14 @@ class LRUCache<K, V> extends LinkedHashMap<K, V> {
57785778
57795779#### TreeMap
57805780
5781- TreeMap集合按照键是可排序不重复的键值对集合。( 默认升序)
5781+ TreeMap集合按照键是可排序不重复的键值对集合( 默认升序)
57825782TreeMap集合和TreeSet集合都是排序不重复集合
57835783TreeSet集合的底层是基于TreeMap,只是键没有附属值而已
57845784
57855785TreeMap集合指定大小规则有2种方式:
5786- a.直接为对象的类实现比较器规则接口Comparable,重写比较方法(拓展方式)
5787- b.直接为集合设置比较器Comparator对象,重写比较方法
5786+
5787+ * 直接为对象的类实现比较器规则接口Comparable,重写比较方法(拓展方式)
5788+ * 直接为集合设置比较器Comparator对象,重写比较方法
57885789
57895790
57905791
@@ -12177,7 +12178,7 @@ JVM是通过栈帧中的对象引用访问到其内部的对象实例:(内
1217712178
1217812179* **长期存活的对象进入老年代**:为对象定义年龄计数器,对象在 Eden 出生并经过 Minor GC 依然存活,将移动到 Survivor 中,年龄就增加 1 岁,增加到一定年龄则移动到老年代中
1217912180 * -XX:MaxTenuringThreshold:用来定义年龄的阈值,在JVM中用4个bit存储(放在对象头中),所以其最大值是15,默认也是15
12180- * **大对象直接进入老年代**:需要连续内存空间的对象,最典型的大对象是那种很长的字符串以及数组 ;避免在 Eden 和 Survivor 之间的大量内存复制;经常出现大对象会提前触发垃圾收集以获取足够的连续空间分配给大对象 ,`-XX:PretenureSizeThreshold`,大于此值的对象直接在老年代分配
12181+ * **大对象直接进入老年代**:需要连续内存空间的对象,最典型的大对象是很长的字符串以及数组 ;避免在 Eden 和 Survivor 之间的大量复制;经常出现大对象会提前触发GC以获取足够的连续空间分配给大对象 ,`-XX:PretenureSizeThreshold`,大于此值的对象直接在老年代分配
1218112182* **动态对象年龄判定**:如果在Survivor区中相同年龄的对象的所有大小之和超过Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代
1218212183
1218312184空间分配担保:
@@ -12302,11 +12303,11 @@ JVM是将TLAB作为内存分配的首选,但不是所有的对象实例都能
1230212303
1230312304### 回收策略
1230412305
12305- 对于 Minor GC,其触发条件非常简单,当 Eden 空间满时,就将触发一次 Minor GC
12306+ 内存垃圾回收机制主要集中的区域就是线程共享区域:**堆和方法区**
1230612307
12307- Full GC 则相对复杂,**FullGC同时回收新生代和老年代,当前只会存在一个FullGC的线程进行执行,其他的线程全部会被挂起**
12308+ 对于 Minor GC,其触发条件非常简单,当 Eden 空间满时,就将触发一次 Minor GC
1230812309
12309- 有以下**触发条件**:
12310+ Full GC 则相对复杂,**FullGC同时回收新生代和老年代,当前只会存在一个FullGC的线程进行执行,其他的线程全部会被挂起**, 有以下**触发条件**:
1231012311
1231112312* 调用 System.gc():
1231212313
@@ -12509,7 +12510,7 @@ Java语言提供了对象终止(finalization)机制来允许开发人员提
1250912510
1251012511#### 无用类
1251112512
12512- 方法区主要回收的是无用的类,
12513+ 方法区主要回收的是无用的类
1251312514
1251412515判定一个类是否是无用的类,需要同时满足下面 3 个条件 :
1251512516
@@ -14607,11 +14608,9 @@ init指的是实例构造器,主要作用是在类实例化过程中执行,
1460714608
1460814609##### 卸载
1460914610
14610- 执行了System.exit()方法,程序正常执行结束,程序在执行过程中遇到了异常或错误而异常终止,由于操作系统出现错误而导致Java虚拟机进程终止
14611-
14612- 卸载类即该类的Class对象被GC
14611+ 时机:执行了System.exit()方法,程序正常执行结束,程序在执行过程中遇到了异常或错误而异常终止,由于操作系统出现错误而导致Java虚拟机进程终止
1461314612
14614- 卸载类需要满足3个要求:
14613+ 卸载类即该类的**Class对象被GC**, 卸载类需要满足3个要求:
1461514614
14616146151. 该类的所有的实例对象都已被GC,也就是说堆不存在该类的实例对象
14617146162. 该类没有在其他任何地方被引用
0 commit comments