JVM GC调优

JVM调优入门…

Java

HashMap扩容机制

聊聊HashMap扩容机制

Java

ConcurrentHashMap 线程安全的具体实现方式/底层具体实现

JDK1.7 首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。 Segment 实现了 ReentrantLock,所以 Segment 是一种可重入锁,扮演锁的角色。HashEntry 用于存储键值对数据...
Java

ConcurrentHashMap 和 Hashtable 的区别

ConcurrentHashMapHashtable 的区别主要体现在实现线程安全的方式上不同。

Java

HashMap 和 Hashtable 的区别

线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的,因为 HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!); 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它; 对 N...
Java

ArrayList和LinkedList的区别

Arraylist 与 LinkedList 区别? 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全; 底层数据结构: Arraylist 底层使用的是 Object 数组;LinkedList 底层使用的是 双向链表 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。) 插入和删除是否受元素位置的影响: ① Array...
Java

ArrayList扩容机制

1234567891、添加元素时,首先进行判断是否大于默认容量102、如果,小于默认容量,直接在原来基础上+1,元素添加完毕3、如果,大于默认容量,则需要进行扩容,扩容核心是grow()方法 3.1 扩容之前,首先创建一个新的数组,且旧数组被复制到新的数组中 这样就得到了一个全新的副本,我们在操作时就不会影响原来数组了 3.2 然后通过位运算符将新的容量更新为旧容量的...
Java

HashMap是线程安全的吗?

HashMap的线程不安全体现在会造成死循环、数据丢失、数据覆盖这些问题。其中死循环和数据丢失是在JDK1.7中出现的问题,在JDK1.8中已经得到解决,然而1.8中仍会有数据覆盖这样的问题。

Java

HashMap底层原理

JDK1.7数据结构则是采用的位桶和链表相结合的形式完成了,即拉链法。具体如下图所示: HashMap里面存储的是静态内部类Entry的对象,这个对象其实也是一个key-value的结构。 hash源码: 12345678static int hash(int h) { // This function ensures that hashCodes that differ...
Java

常见的IO模型有哪些?Java中的BIO,NIO,AIO的区别

从应用程序的视角来看的话,我们的应用程序对操作系统的内核发起 IO 调用(系统调用),操作系统负责的内核执行具体的 IO 操作。也就是说,我们的应用程序实际上只是发起了 IO 操作的调用而已,具体 IO 的执行是由操作系统的内核来完成的。

Java