- 博客(5)
- 资源 (6)
- 收藏
- 关注
原创 java锁的升级过程
无锁,偏向锁,轻量级锁,重量级锁jdk1.6后减少锁的消耗时,引入偏向锁和轻量级锁,锁可以升级但不能降级。因为自旋会消耗CPU,为了避免无用的自旋(比如获得锁的线程被阻塞住了)一旦锁升级成重量级锁,就不会再恢复到轻量级锁状态。当锁处于这个状态下,其他线程试图获取锁时,都会被阻塞住,当持有锁的线程释放锁之后会唤醒这些线程,被唤醒的线程就会进行新一轮的夺锁之争锁分级别原因:没有优化以前,synchronized是重量级锁(悲观锁),使用 wait 和 notify、notifyAll 来切换线程状态非常
2020-09-16 18:26:32 615 1
原创 强引用、软引用、弱引用、虚引用的区别?
强引用当内存不足的时候,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收!强引用是我们最常见的普通对象引用,只要还有一个强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到,JVM也不会回收,因此强引用是造成Java内存泄漏的主要原因之一。对于一个普通的对象,如
2020-09-15 21:53:16 184
原创 jvm垃圾收集器,各自的优缺点
垃圾回收器Serial收集器: 针对新生代的单线程收集器,使用复制算法。收集垃圾是会产生较长时间的停顿,但不会产生线程切换的开销Serial Old收集器: 针对老年代的单线程收集器,使用标记整理算法。Parallel Scavenge收集器: jdk 1.8默认的垃圾回收器。新生代回收器,采用复制算法,多线程并行回收,充分利用CPU资源。进行垃圾收集时,必须暂停所有工作线程,直到完成Parallel Old收集器: 是Parallel Scavenge收集器的老年代版本,使用.
2020-09-15 21:21:10 407
原创 redis底层数据结构
1.动态字符串用的是c语言,自己写的简单动态字符串sds,分为struct sdshdr{ //记录buf数组中已使用字节的数量 int len; //记录 buf 数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[];}为什么设计呢1.常熟复杂度获取字符串的长度,c语言是要遍历一遍计数的,空间换时间,直接读len就行了2.防止缓存溢出,字符串strcat时,可能由于分配的空间不够导致 内存
2020-09-15 11:56:17 93
原创 condition精准唤醒
package JUC.condition;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author HuangHaiyang * @date 2020/07/02 * @description: description * @version: 1.0.0
2020-09-13 17:47:53 276
echarts.js
2020-08-08
抽奖轮播实现的,html,js.zip
2020-04-30
jsp的驱动包.zip
2020-04-14
DBConnection.java
2020-04-13
机组初步认知.docx
2020-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人