@@ -114,6 +114,8 @@ As-if-serial的意思是所有的语句都可以为了优化而被重排序,
114
114
115
115
双亲委派机制概念:双亲委派机制是指当一个类加载器收到某个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,它会先委托父类加载器在自己的搜索范围内找不到对应的类时,该类加载器才会尝试自己去加载。
116
116
117
+ 双亲委派机制的作用:保证Java类的加载的一致性和安全性,避免了类的重复加载和恶意代码的替换。
118
+
117
119
Tomcat中的类加载器:
118
120
119
121
- Tomcat自身所使用的类加载器,会加载jre的lib包及tomcat的lib包的类,遵循双亲委派机制。加载顺序:(1).先从缓存中加载;(2).如果没有,则从JVM的Bootstrap类加载器加载;(3).如果没有,则从父类加载器加载,加载顺序是AppClassLoader、Common、Shared。(4).如果没有,则从当前类加载器加载(按照WEB-INF/classes、WEB-INF/lib的顺序);
@@ -241,7 +243,7 @@ Garbage First(G1)收集器:
241
243
242
244
![ ] ( https://raw.githubusercontent.com/CompetitiveLin/ImageHostingService/picgo/imgs/202305091525435.png )
243
245
244
-
246
+ 一个线程 OOM 后,其他线程仍能正常运行,因为 OOM 之前会 GC,释放掉资源。
245
247
246
248
247
249
# [ JVM调优] ( https://cloud.tencent.com/developer/beta/article/1812722 )
@@ -437,6 +439,7 @@ JDK8:**对table数组的头节点加锁**(哈希桶为空时,使用CAS将
437
439
3 . 如果判断有其他线程正在对ConcurrentHashMap扩容(hash==MOVED),获取要去获取新的tab,进入下次循环;
438
440
4 . 找到了对应哈希桶的首节点f,直接** 对f加synchronized同步** ,然后判断f节点是链表结构还是红黑树结构,链表结构则遍历链表进行设置,红黑树则采用红黑树设置进去。设置成功后判断是否需要把链表结构转红黑树;
439
441
442
+ - get: 大部分情况下不加锁,是通过 volatile 修饰 Node 成员 val 保证的。与 volatile 修饰桶数组无关,桶数组用 volatile 修饰主要是保证在数组扩容的时候保证可见性。仅当节点为红黑树、正在变色旋转、查询非头节点时,会加基于 CAS 实现的读写锁。
440
443
441
444
ThreadLocal: 提供线程内的局部变量,在多线程的环境中保证各个线程内的变量不同。将数据封闭在线程中而避免使用同步,即线程封闭。一个ThreadLocal对象即是一个线程局部变量。jdbc连接池就是用ThreadLocal,典型例子。以下使四种方法:
442
445
- Object get():获取该线程局部变量的值。
@@ -628,9 +631,9 @@ java中静态属性和静态方法可以被继承,但是不能被重写,因
628
631
- List<T extends Serialzable & Cloneable> 擦除后类型为 List。
629
632
630
633
# [ JDK 设计模式] ( https://www.cnblogs.com/vipstone/p/18361126 )
631
- 1 . 单例模式:Runtime 类使用饿汉式创建单例
632
- 2 . 工厂模式:线程池中所有线程,通过工厂模式创建
633
- 3 . 代理模式:` java.lang.reflect.Proxy ` 中的动态代理
634
- 4 . 迭代器模式:` java.util.Iterator ` 使用迭代器遍历集合容器
635
- 5 . 模板方法:AQS 中的 ` acquire ` 和 ` release ` 方法被独占式和共享式所重写
634
+ 1 . 单例模式:` java.lang ` Runtime 类使用饿汉式创建单例
635
+ 2 . 工厂模式:` java.util.concurrent ` ThreadFactory 接口使用工厂模式创建线程
636
+ 3 . 代理模式:` java.lang.reflect ` Proxy 类使用动态代理
637
+ 4 . 迭代器模式:` java.util ` Iterator 接口使用迭代器遍历集合容器
638
+ 5 . 模板方法:` java.util.concurrent.locks ` AQS 中的 ` tryAcquire ` , ` tryRelease ` , ` tryAcquireShared ` , ` tryReleaseShared ` 方法被公平锁和非公平锁重写
636
639
0 commit comments