240 发简信
IP属地:北京
  • 12.4 原子性,可见性

    1. 原子性的操作:read,load,assign,use,shore,write 2. 可见性的操作:volatile,synchronized,final 3. 有序性...

  • 12.5 先行发生原则

    时间先后顺序于先行发生没有绝对关系,一切以先行发生原则为主。 1. 程序次序原则。同一个线程内,按照程序代码顺序先后执行。 2. 管道锁定规则。一个unlock操作先行于后面...

  • 13.1 线程安全级别

    1. 不可变。final。如果是对象,所有属性为final即可。 2. 绝对线程安全。 3. 相对线程安全。对象单独操作都是线程安全的,对于一些特定顺序的连续调用,需要额外使...

  • 13.2 线程安全的实现方法

    1. 互斥同步。保证在某一时刻共享数据只被一个线程使用。 synchronize为什么消耗大呢?synchronize在方法完成之前,会阻塞后面的进程,Java的线程映射...

  • 120
    13.3 锁优化

    1. 自旋锁与自适应自旋。共享数据的锁定只会持续短时间,通过自旋看看持有锁的线程是否会很快释放。1.6之后加入自适应自旋,根据前一次在同一个锁上的自旋时间及拥有者状态而定。 ...

  • 120
    1.1 简单动态字符串

    SDS:simple dynamic String 优势: 1.提升效率,C语言的字符串如果需要知道字符串的长度,需要遍历,复杂度是O(n),而针对SDS,复杂度是O(1...

  • 120
    1.2 链表、字典

    每个字典的底层采用哈希表实现,每个字典带有两个哈希表,一个平常使用,一个仅在rehash时使用。redis使用murmurHash2算法来计算hash值 渐进式rehash ...

  • 120
    1.4 字符串以及List底层实现

    Redis 并没有直接使用数据结构来构建键值对,而是基于这些数据结构创建了一个对象系统。 该对象保存与数据有关的三个属性分别是:type(类型),encoding(编码类型)...

  • 1.5 哈希对象底层实现

    哈希对象的编码可以是ziplist或hashtable 1. ziplist编码的哈希对象使用压缩列表作为底层实现,每当新的键值对加入哈希对象时,程序首先会将保存了键的压缩列...

  • 120
    1.6 集合对象与有序集合对象

    集合对象的编码可以是intset或是hashtable 有序集合对象的编码可以是ziplist或是skiplist。 skiplist编码的有序集合使用zset结构作为底层实...

  • 120
    2.1 redis过期设置原理

    1. 所有的过期指令最终都变成了PEXPIREAT指令 2. redis保存一份过期字典,键是一个指针,指向某个键对象,值是过期时间,一个毫秒精度的时间戳。过期字典与键空间中...

  • 2.2 持久化

    1. RDB文件的创建与载入 1. 有两个指令可以创建RDB文件,分别是save与bgsave,前者stw,后者创建子进程运行。 2. RDB文件的载入没有指令控制,...

  • 120
    9.1 Tomcat类库加载

    /common 目录:类库可被 Tomcat 及所有 Web 应用程序使用 /server 目录:类库可被Tomcat使用,对所有Web引用不可见 /shared 目录:类库...

  • 4.1 类加载

    类的生命周期:加载,连接,初始化,使用,卸载。连接包括验证,准备,解析。

  • 2.5 垃圾收集器

    oopMap 安全点 主动式中断(抢断式中断) 安全区域 Serial收集器:单线程收集器,工作时必须暂停虚拟机的其他工作,STW ParNew收集器:Serial收集器的多...

  • 2.4 垃圾回收算法

    1. 标记清除算法。最基础的收集算法,缺点是标记跟清除效率不高,清除后会产生大量的不连续碎片,这样在之后遇到大对象的时候会重新出发一次收集算法。 2. 复制算法。将内存分为两...

  • 2.6 监控工具

    jps:虚拟机进程状况工具 jps -l jstat:虚拟机统计信息监视工具 查询gc:jstat -gc 250 20 每250毫秒输出输出一次gc日志,共20次 ...

  • 2.3 回收方法区

    堆的回收比较好理解,方法区同时也会被回收 回收策略: 1. 废弃常量,即该常量不再被任何String对象所引用; 2. 无用的类。需同时满足下列三个条件: a...