- 博客(33)
- 收藏
- 关注
原创 Dubbo原理
dubbo服务暴露:ServiceBean implements InitializingBean, ApplicationListener<ContextRefreshedEvent>void afterPropertiesSet(); setApplication(); ...void onApplicationEvent(E event); export(); doExport(); doExportUrl()...
2021-09-16 15:32:11
108
原创 Spring随记(一)
Spring之AOP顺序 S4之正常顺序: @Before ==》@After ==〉@AfterReturning S4之异常顺序: @Before ==》@After ==〉@AfterThrowing ******************************************** S5之正常顺序: @Before ==》@AfterReturning ==〉@After S5之异常顺序: ...
2020-11-20 10:48:44
114
原创 深入理解AQS底层源码(二)——lock.unlock()
接着上一次线程2和线程3park后,需要unpark()唤醒。第一步:线程1执行完成后,调用lock.lock()方法,实际调用的是sync.release(1)方法;第二步:线程1调用底层的release(int arg)方法,走到tryRelease(arg)方法;getState() = 1,因为之前线程1加锁后state设值为1,它也是volatile修饰的。Thread.currentThread() = 线程1,c = 0,free = true,setState(0),返回
2020-11-19 17:16:20
157
原创 深入理解AQS底层源码(一)——lock.lock()
前期准备:1、可重入锁(递归锁):外层使用锁后,在内层仍然可以使用锁。同一个线程可以获取多个同一把锁。优点:避免死锁。特点:锁对象是同一个对象2、LockSupport:LockSupport.park(); LockSupport.unPark(Thread t);类比 synchronized wait notify ; lock.newCondition await signalwait notify必须和synchronized搭配使用且先wait后notify;awai...
2020-11-19 15:30:01
1324
原创 高并发下的ThreadLocal
通常 ThreadLocal 可以提供线程内的局部变量,确保每个线程都有自己的专属变量值。但在使用线程池的场景下,线程经常会被复用,同一个线程可能会处理多个业务会话场景(比如多个用户 session),这样就可能会造成后续业务逻辑上的混乱和错误。另外,尽管 ThreadLocal 底层利用弱引用和其它机制来回收资源,ThreadLocal 使用不当时仍可能会产生内存泄漏。ThreadLocal 使用本身实例作为key将用户的值保存在 Thread 的 ThreadLocalMap 中,如果一个 T.
2020-10-20 16:25:24
1152
原创 jvm调优相关随记
1、jvm的参数类型:标配参数,如:java -versionX参数XX参数(重点)---------------------------------------------------查看正在运行中的Java程序,它的jvm参数是否开启,具体值为多少?jps -ljinfo -flag jvm参数 进程编号 (如,jinfo -flag PrintGCDetails 进程编号)-------------------------------------------------
2020-07-03 12:40:16
208
原创 7种垃圾回收器介绍
先看图:新生代收集器Serial收集器Serial收集器是采用复制算法的新生代收集器,一个单线程收集器,只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集时,必须暂停其他所有的工作线程,直至Serial收集器收集结束为止(“Stop The World”)。这项工作是由虚拟机在后台自动发起和自动完成的,在用户不可见的情况下把用户正常工作的线程全部停掉。ParNew 收集器ParNew收集器是多线程的,它也是一个新生代收集器。其余行为包括Serial收集
2020-07-02 16:13:30
4288
原创 MySql高级部分总结(一)
1、MySQL的配置文件:2、MySQL的主要存储引擎:对比项 myisam innodb 外键 不支持 支持 事务 不支持 支持 行/表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 关注点 节省资源、消耗少、简单业务
2020-06-20 14:17:22
234
原创 Redis-避免缓存穿透的利器之BloomFilte
Bloom Filter 概念布伦过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。Bloom Filter 原理布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素
2020-06-16 17:21:56
281
原创 Map集合相关总结
1、Collections.synchronizedMap是怎么实现线程安全的?答:在SynchronizedMap内部维护了一个普通对象Map,还有排斥锁mutex。如图:我们在调用这个方法的时候就需要传入一个Map,可以看到有两个构造器,如果你传入了mutex参数,则将对象排斥锁赋值为传入的对象。如果没有,则将对象排斥锁赋值为this,即调用synchronizedMap的对象,就是上面的Map。创建出synchronizedMap之后,再操作map的时候,就会对方法上锁。2、为啥 Ha
2020-06-15 16:35:19
246
原创 8种锁
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法加个普通方法后发现和同步锁无关换成两个对象后...
2020-05-06 16:22:10
161
原创 Linux下常用命令详解随记
Linux常用命令:整机 top 查看 CPU MEM load average:系统的负载均衡,三个值分别代表1分钟,5分钟,15分钟,系统的平均负载值。 三个值相加除以3*100%>60%,系统负担压力重 uptime,系统性能精简版CPU vmstat vmstat -n 2 3 查看CPU,每...
2019-12-20 14:27:40
151
转载 JDK动态代理的实现及原理
https://blog.csdn.net/zhangerqing/article/details/42504281动态代理,听上去很高大上的技术,在Java里应用广泛,尤其是在Hibernate和Spring这两种框架里,在AOP,权限控制,事务管理等方面都有动态代理的实现。JDK本身有实现动态代理技术,但是略有限制,即被代理的类必须实现某个接口,否则无法使用JDK自带的动态代理,因此,如果...
2019-12-19 14:03:24
107
原创 OutOfMermory系列
java.lang.StackOverflowError(方法的深入的调用加载,递归调用,栈内存512m~1024m)java.lang.OutofMemoryError: Java heap space(堆内存不够用导致)java.lang.OutofMemoryError: GC overhead limit exeeded(GC回收时间过长,几乎一直在进行垃圾回收)java.lang....
2019-12-09 12:13:05
236
原创 CAS,自旋锁底层原理
底层原理:自旋锁Unsafe类调用操作系统底层资源执行任务valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value"));像C的指针一样直接操锁内存unsafe.getAndAddInt(this,valueOffset,1);this:当前对象valueOff...
2019-12-09 12:11:54
1189
原创 线程池7个核心参数及执行流程
线程池核心参数:1、corePoolSize:线程池中的常驻核心线程数2、maximumPoolSize:线程池能容纳同时执行的最大线程数,此值必须>=13、keepAliveTime:多余的空闲线程的存活时间当前线程池数量超过corePoolSize时,当空闲的时间达到keepAliveTime值时,多余的空闲线程会被直接销毁直到只剩下corePoolSize个线程为止...
2019-12-09 12:08:26
4337
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人