上一页 1 2 3 4 5 6 7 8 ··· 10 下一页
摘要: 一、Java堆内存结构 JVM将堆分成了二个大区新生代(Young)和老年代(Old),新生代又被进一步划分为Eden(伊甸园空间)和Survivor(幸存者空间)区,而Survivor由Survivor1和Survivor2组成,也有些人喜欢用FromSpace和ToSpace来代替。这里为什么要 阅读全文
posted @ 2020-06-16 11:13 cao_xiaobo 阅读(778) 评论(0) 推荐(1) 编辑
摘要: concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS框架借助于两个类: Unsafe(提供CAS操作) LockSupport(提供park/unpark操作,底层仍然调用是Unsafe类的park/unpark方法) 因此,LockSuppor 阅读全文
posted @ 2020-06-16 10:31 cao_xiaobo 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 前言 摘自《深入理解Java虚拟机》一书 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面 阅读全文
posted @ 2020-06-16 10:24 cao_xiaobo 阅读(419) 评论(0) 推荐(0) 编辑
摘要: CAS(Compare And Swap) 比较并交换 前言 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题: 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 阅读全文
posted @ 2020-06-16 10:13 cao_xiaobo 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 一、synchronized 的原理 JVM 基于进入和推出Monitor对象来实现方法和同步代码块,但两者的实现细节不同。 synchronize 修饰的同步代码块:使用monitorenter 和 monitorexit 指令实现; synchronize 修饰的方法并没有 monitorent 阅读全文
posted @ 2020-06-16 09:07 cao_xiaobo 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁。JDK 1.6中默认是开启偏向锁和轻量级锁的,我们也可以通过-XX:-UseBiasedLocking来禁用偏向锁。锁的状态保存在对象的头文件中,以32位的JDK为例。 每个对象一 阅读全文
posted @ 2020-06-16 08:54 cao_xiaobo 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 一、循环依赖产生的原因 A依赖B,B又依赖A @Component class A { @Autowired B b; } @Component class B { @Autowired A a; } A类Bean创建过程: 先实例化A,(一般都是)通过无参构造完成实例化; A属性注入,发现A依赖B 阅读全文
posted @ 2020-05-10 13:05 cao_xiaobo 阅读(622) 评论(1) 推荐(1) 编辑
摘要: bean的生命周期把它总结为以下几个阶段 实例化 属性注入/依赖注入 初始化 销毁 其中实例化、属性注入、初始化属于bean创建的过程。 bean创建的过程流程图 (1)当spring容器在启动的时候或者启动完成后显示调用getBean方法时来获取bean实例的时候,都会调用这个doGetBean方 阅读全文
posted @ 2020-05-10 01:31 cao_xiaobo 阅读(3327) 评论(0) 推荐(0) 编辑
摘要: 调试分析 由于源码一步一步调试效率太低了,所以我这里就直接在自定义的Filter类上的doFilter方法中打上断点 先通过线程栈来大致看一下,请求的过程中执行了哪些步骤 每一个方法点进去,然后给它整理成一张表格,如下: 分析: 上图执行执行次数最多的方法是invoke 所有调用invoke方法的类 阅读全文
posted @ 2020-05-09 23:36 cao_xiaobo 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 线程上下文切换(Thread Context Switch ) 定义 CPU执行线程的时候是通过时间分片的方式来轮流执行的,当某一个线程的时间片用完(到期),那么这个线程就会被中断,CPU不再执行当前线程,CPU会把使用权给其它线程来执行。如T1线程未执行结束,T2/T3线程插进来执行了,若干时间后 阅读全文
posted @ 2020-05-01 18:20 cao_xiaobo 阅读(2058) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 10 下一页