ConcurrentHashMap的原理是引用了内部的 Segment ( ReentrantLock ) 分段锁,保证在操作不同段 map 的时候, 可以并发执行, 操作同段 map 的时候,进行锁的竞争和等待。从而达到线程安全, 且效率大于 synchronized。
1.队列则不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多。
如果一个类收到了类加载请求,它并不会自己先去加载,而是会把这个请求委托给父类的加载器执行。如果父加载器还存在其父加载器,则再进一步向上委托,依次递归,请求将最终到达顶层的启动类加载器。如果父类加载器可以完成加载任务,就成功返回;如果父加载器无法完成加载任务,子加载器才会尝试自己去加载,这就是双亲委派模型。
当程序主动使用某个类时,如果该类还未被加载到内存中,JVM会通过加载、连接、初始化3个步骤对该类进行类加载
JVM包括类加载子系统、堆、方法区、栈、本地方法栈、程序计数器、直接内存、垃圾回收器、执行引擎。 1. 类加载子系统:类加载子系统负责加载class信息,加载的类信息存放于方法区中。 2. 直接内存 直接内存是在Java堆外的、直接向系统申请的内存空间。访问直接内存的速度会由于Java堆。出于性能的考虑,读写频繁的场合可能会考虑使用直接内存。