05 2020 档案
摘要:Spring Bean的生命周期 Bean的生命周期就是Bean创建—销毁—初始化的过程,这些都由容器管理 我们可以自定义销毁和初始化的方法,特别在配置数据源的时候很有用 @Bean(initMethod="init",destroyMethod="detory") public Car car()
阅读全文
摘要:栈的概述 栈 Stack Each Java Virtual Machine thread has a private Java Virtual Mahine stack, created at the same time as the thread. A Java Virtual Machine
阅读全文
摘要:线程的调度 线程的调度是指系统为线程分配处理器使用权的过程,主要调度方式有两种 协同式线程调度 线程执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切到另一个线程上。 协调式多线程的最大的好处是实现简单,而且由于线程要把自己的事情干完之后才会进行线程切换,切换操作对线程自己是可
阅读全文
摘要:通过代码计算对象的大小 先说结论:默认16个字节 工具JOL :Java Object Layout java对象布局 引入POM文件 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId>
阅读全文
摘要:Synchronized底层实现 1)先在Idea下载一个ByteCode插件来观察java经过编译之后的字节码 public class TestSync { synchronized void m() { } void n() { synchronized (this) {//monitoren
阅读全文
摘要:CPU的内存屏障(硬件层级) Intel的CPU内存屏障逻辑: sfence:save| 在sfence指令前的写操作当必须在sfence指令后的写操作前完成 两条指令,如果不想让它重排,在两条指令中间加一道屏障。即 屏障两侧的写指令不能重排 lfence:load| 在lfence指令前的写操作当
阅读全文
摘要:硬件上存储器的层次结构 有一个问题: 当我们数据在L3到L6之间的时会被Load到不同的CPU之中,不同的CPU之间的数据怎么一致性 也就是说,一个线程改了CPU内部的数据,另一个线程在另一个CPU上怎么才能知道呢 解决办法 1. 把总线锁住(L2和L3之间加把锁),一个CPU访问L3上的一个数的时
阅读全文