AtomicReference原子性引用

AtomicReference 不能保证对象中若存在属性值修改是线程安全的,AtomicReference类提供了一个可以原子读写的对象引用变量,不安全的修改自定义对象属性的值,多个线程同时从引用中获得对象

线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

其中热点数据value会被分离成多个cell,比如说它可以将AtomicLong内部核心数据value分离成一个数组,在失败几率很高的情况下,争夺单个变量的线程会减少

CountDownLatch和Semaphore使用场景

这时就必须控制最多只有10个线程能够拿到数据库连接进行操作,CountDownLatch比较适合保证线程执行完后再执行其他处理,就可以使用Semaphore做流量控制,就是信号量, 可以阻塞线程并且可以控制同时访问线程的个数,通过 获取一个许可,如果没有获取到就继续等待,通过 释放一个许可

Java内存模型 - 同步八种操作

解除变量的锁定状态,变量才会被解锁,在执行引擎使用这个变量前,将该值从变量中取出

JVM与计算机之间的关系

这是因为CPU访问寄存器的速度远大于主存,CPU在寄存器中执行操作的速度远大于在主存上执行的速度,主存通常比CPU中的缓存大得多,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高级缓存来作为内存与处理器之间的缓冲

Java 内存模型(Java Memory Model,JMM)

当一个线程可以访问一个对象,它可以访问该对象的成员变量,如果两个线程同时调用一个对象的同一个方法,将会都访问该对象的成员变量,但是每个线程都有了该成员变量的私有拷贝,一个对象的成员变量可能会随着这个对象存放在Heap上,不管这个成员变量是基本类型还是引用类型,静态成员变量跟随类的定义一起放在Heap上,Java中Heap是运行时数据区,有垃圾收集器负责,它的优势的是动态分配内存,生命周期不必事先告诉编译器,在运行时动态分配内存,JVM垃圾收集器会自动回收不再使用的数据.缺点是:由于是在运行时分配的内存,所以存取速度相对较慢,一个类可能有方法,方法中的局部变量也是放在线程栈上,即使这些方法所属的对象依然在Heap上

JVM中8种垃圾收集器小结

引入 Java Sound API,引入 Java Compiler API,引入 Java 插件,标记-整理+复制算法

Mac下运行VS code风扇一直狂转

并且项目启动后访问页面,打开Mac活动监视器发现Code Helper启动了好几个,并退出重新启动VSCode和项目,在Mac中使用VSCode运行时发现项目编译非常卡顿

总结G1垃圾收集器面试题

G1垃圾收集器的运行过程,G1收集器将堆内存划分成大小相等的 ,新生代,老年代也就成了逻辑概念,比较 直接引用的对象同时标记,同时标记 对象所在的 称为,对象的大小>=1个 存到连续的大对象区

总结CMS常见面试题

并发标记:和应用线程并发执行,遍历 阶段标记过的对象,标记这些对象的可达对象,重新标记:由于 是和应用线程是并发执行的,所以有些标记过的对象发生了变化,原因:CMS垃圾清理线程和应用线程是并发执行的,如果在清理过程中老年代空间不足不能容纳新对象,当并行模式(concurrent mode failure)失败时CMS会退化成 .

入门小站