JIT与AOT
摘要:JIT JIT(Just-in-Time,实时编译)一直是Java语言的灵魂特性之一,HotSpot JVM中集成了两种JIT编译器,Client Compiler和Server Compiler,它们的作用也不同。Client Compiler注重启动速度和局部的优化,Server Compile
阅读全文
posted @
2024-07-04 11:30
zhengbiyu
阅读(76)
推荐(0) 编辑
反射优化
摘要:要优化首先得知道瓶颈点,如下代码进行测试。 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTest { public static vo
阅读全文
posted @
2024-06-25 17:06
zhengbiyu
阅读(6)
推荐(0) 编辑
线程池异常统一处理
摘要:①直接catch 第一种思路很简单,就是把业务逻辑都trycatch起来。 ②自定义线程池 自定义线程池,继承ThreadPoolExecutor并复写其afterExecute(Runnable r, Throwable t)方法。 //java.util.concurrent.ThreadPoo
阅读全文
posted @
2024-06-19 11:23
zhengbiyu
阅读(30)
推荐(0) 编辑
BigDecimal为什么能保证精度不丢失?
摘要:先说说为什么会丢精度。 public static void main(String[] args) { //正常 3.3 System.out.println("加法结果:"+(1.1+2.2)); //正常 -7.9 System.out.println("减法结果:"+(2.2-10.1));
阅读全文
posted @
2024-06-08 18:31
zhengbiyu
阅读(381)
推荐(1) 编辑
泛型擦除的原理
摘要:以下程序的输出是什么: List<String> stringList = new ArrayList<>(); List<Integer> intList = new ArrayList<>();//输出true System.out.println(stringList.class == int
阅读全文
posted @
2024-06-08 16:39
zhengbiyu
阅读(27)
推荐(0) 编辑
ArrayList、LinkedList
摘要:区别 ArrayList是实现了基于数组的数据结构,内存连续;LinkedList是基于链表结构。 对于随机访问的get和set方法查询元素,ArrayList要优于LinkedList,因为LinkedList循环链表寻找元素。 对于新增和删除操作add和remove,LinkedList比较高效
阅读全文
posted @
2024-06-08 16:15
zhengbiyu
阅读(8)
推荐(0) 编辑
LinkedBlockingQueue
摘要:LinkedBlockingQueue继承体系 与ArrayBlockingQueue一样,LinkedBlockingQueue实现了Queue、BlockingQueue接口,继承AbstractCollection类。 源码分析 LinkedBlockingQueue的成员变量 // 队列的容
阅读全文
posted @
2024-03-02 10:50
zhengbiyu
阅读(164)
推荐(0) 编辑
线程池-workQueue
摘要:线程池参数的 workQueue 决定了缓存任务的排队策略,对于不同的业务场景,我们可以使用不同的排队策略。 我们只需要实现BlockingQueue 这个接口即可。 介绍一下常用的有三种workQueue。 1. SynchronousQueue SynchronousQueue没有容量,是无缓冲
阅读全文
posted @
2024-01-28 12:16
zhengbiyu
阅读(244)
推荐(0) 编辑
wait、sleep区别
摘要:共同点 都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态。 不同点 1. 来自不同的类:wait():来自Object类;sleep():来自Thread类; 2.关于锁的释放:wait():在等待的过程中会释放锁;sleep():在等待的过程中不会释放锁3.使用的范围:wait():必须在同
阅读全文
posted @
2023-04-06 16:44
zhengbiyu
阅读(24)
推荐(0) 编辑
ForkJoin
摘要:ForkJoinPool 是 JDK 7 中,@author Doug Lea 加入的一个线程池类。Fork/Join 框架的核心原理就是分治算法(Divide-and-Conquer)和工作窃取算法(work-stealing algorithm)。 Fork分解任务成独立的子任务,用多线程去执行
阅读全文
posted @
2023-04-03 15:50
zhengbiyu
阅读(33)
推荐(0) 编辑
缓存行与伪共享问题
摘要:局部性原理 时间局部性:如果数据正在被访问,那么在近期它很可能还会被再次访问。比如循环、方法的反复调用等。 空间局部性:如果存储器的位置被引用,那么将来他附近的位置也会被引用。比如顺序结构、数组。 CPU缓存 执行程序是靠CPU执行主存中代码,但是CPU和主存的速度差异是非常大的,为了降低这种差距,
阅读全文
posted @
2023-03-30 17:44
zhengbiyu
阅读(112)
推荐(0) 编辑
Condition
摘要:Condition用途 当多个线程需要访问一个共享资源时,需要给共享资源加锁。 当一个线程释放锁时,所有等待锁的线程都会尝试去获取锁。如果想只让部分等待锁的线程去获取锁时,就需要用到Condition。 执行wait方法后,线程会阻塞,并释放同步代码块的锁(sleep方法会持有锁),notify的方
阅读全文
posted @
2023-03-30 16:52
zhengbiyu
阅读(163)
推荐(0) 编辑
线程状态
摘要:Java 线程状态 (6 种) Java线程的生命周期分为:NEW(初始化状态)、RUNNABLE(可运行状态/运行状态)、BLOCKED(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(有时限的等待)、TERMINATED(终止状态)。 可以看下源码中线程State的枚举类:
阅读全文
posted @
2023-03-30 00:44
zhengbiyu
阅读(4)
推荐(0) 编辑
AQS与ReentrantLock
摘要:AQS aqs全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实现任何的
阅读全文
posted @
2023-03-30 00:43
zhengbiyu
阅读(7)
推荐(0) 编辑
synchronized和lock的区别
摘要:synchronized是Java内置的一个关键字,Lock是是一个Java接口。 synchronized无法判断获取锁的状态,而lock锁可以判断是否获取到了锁。 synchronized会自动释放锁,而lock必须手动释放锁。如果不释放就会变成死锁。 synchronized 可重入锁,不可以
阅读全文
posted @
2023-03-30 00:41
zhengbiyu
阅读(18)
推荐(0) 编辑
ThreadLocal
摘要:运行时,会在栈中产生两个引用,指向堆中相应的对象。 可以看到,ThreadLocalMap使用ThreadLocal的弱引用作为key,这样一来,当ThreadLocal ref和ThreadLocal之间的强引用断开 时候,即ThreadLocal ref被置为null,下一次GC时,thread
阅读全文
posted @
2023-03-30 00:34
zhengbiyu
阅读(18)
推荐(0) 编辑
线程池
摘要:线程池的生命周期,总共有五种状态 RUNNING :能接受新提交的任务,并且也能处理任务队列中的任务; SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。在线程池处于 RUNNING 状态时,调用 shutdown()方法会使线程池进入到该状态。(finali
阅读全文
posted @
2023-03-29 23:16
zhengbiyu
阅读(16)
推荐(0) 编辑
synchronized
摘要:基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个: 原子性:确保线程互斥的访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到
阅读全文
posted @
2023-03-29 22:56
zhengbiyu
阅读(49)
推荐(0) 编辑
volatile
摘要:volatile是 Java 中的一个关键字,当一个变量是共享变量,同时被 volatile 修饰当值被更改的时候,其他线程再读取该变量的时候可以保证能获取到修改后的值,通过 JMM 屏蔽掉各种硬件和操作系统的内存访问差异 以及 CPU 多级缓存等导致的数据不一致问题。 需要注意的是,volatil
阅读全文
posted @
2023-03-29 21:58
zhengbiyu
阅读(53)
推荐(0) 编辑