• Java的NIO主要由三个核心部分组成:Channel、Buffer、Selector。 基本上,所有的IO在NIO中都从一个Channel开始,数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。Channel...
  • MySQL支持多种方法在单个或多个列上创建索引: 在创建表的时候创建索引: 使用CREATE TABLE创建表时,除了可以定义列的数据类型,还可以定义主键约束、外键约束或者唯一性约束,而不论创建哪种约束,在定义约束的同时相当于在指定列上创建了一个...
  • get操作: Segment的get操作实现非常简单和高效,先经过一次再散列,然后使用这个散列值通过散列运算定位到 Segment,再通过散列算法定位到元素。get操作的高效之处在于整个get过程都不需要加锁,除非读到空的值才会加锁重读。原因就是...
  • 不一定。 比如,在使用组合索引的时候,如果没有遵从“最左前缀”的原则进行搜索,则索引是不起作用的。 举例,假设在id、name、age字段上已经成功建立了一个名为MultiIdx的组合索引。索引行中按id、name、age的顺序存放,索引可以搜索...
    • 10月前
  • LinkedHashMap继承于HashMap,它在HashMap的基础上,通过维护一条双向链表,解决了HashMap不能随时保持遍历顺序和插入顺序一致的问题。在实现上,LinkedHashMap很多方法直接继承自HashMap,仅为维护双向链表...
  • 新创建的对象一般会被分配在新生代中,常用的新生代的垃圾回收器是 ParNew 垃圾回收器,它按照 8:1:1 将新生代分成 Eden 区,以及两个 Survivor 区。某一时刻,我们创建的对象将 Eden 区全部挤满,这个对象就是挤满新生代的最...
    • 10月前
  • Map接口有很多实现类,其中比较常用的有HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap。 对于不需要排序的场景,优先考虑使用HashMap,因为它是性能最好的Map实现。如果需要保证线程安全,则可以...
  • JVM的启动过程分为如下四个步骤: JVM的装入环境和配置 java.exe负责查找JRE,并且它会按照如下的顺序来选择JRE: 自己目录下的JRE; 父级目录下的JRE; 查注册中注册的JRE。 装载JVM 通过第一步找到JVM的路径后,Jav...
    • 11月前
  • 使用Collections工具类,将线程不安全的Map包装成线程安全的Map; 使用java.util.concurrent包下的Map,如ConcurrentHashMap; 不建议使用Hashtable,虽然Hashtable是线程安全的,但...
  • 内存溢出(out of memory):简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存,于是就发生了内存溢出。 引起内存溢出的原因有很多种,常见的有以下几种: 内存中加载的数据量过于庞大,如一次从数...
    • 11月前