一直对常量池、字符串池、包装类对象池的认识不是那么深刻,下面巩固一下。 常量池分为静态常量池与动态常量池。 静态常量池在Class文件中(占用Class文件空间最大的数据项目之一),运行时常量池在方法区中,JDK1.8方法区已经被元数据区替代。 字符串常量池在1.7时被移动到了堆中。 String str = new String("Hello world") 创建了 2 个对象,一个驻留在字符串池,一个分配在 Java 堆,str 指向堆上的实例。 String.intern() 能在运行时向字符串池添加常量。 部分包装类实现了池化技术,-128~127 以内的对象可以重用。 Java 8 中的常量池、字符串池、包装类对象池 常量池
CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信作用。 CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。 Semaphore计数信号量用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。信号量还可以用来实现某种资源池,或者对容器施加边界。 CountDownLatch /CyclicBarrier /Semaphore 并发
Elasticsearch 设计的理念就是分布式搜索引擎,底层实现还是基于 Lucene 的,核心思想是在多台机器上启动多个 es 进程实例,组成一个 es 集群。以下是 es 的几个 ElasticSearch高可用原理与设计方案 elasticsearch
简单来说,HashMap 由数组 + 链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前 entry 的 next 指向 null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,根据 key 的 hash 值&&key 对象的 equals 方法逐一比对查找。所以,性能考虑,HashMap 中的链表出现越少,性能才会越好。 HashMap1.7总结分析 HashMap