自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (2)
  • 收藏
  • 关注

原创 洗衣店管理系统

洗衣店管理系统 毕业设计

2022-09-18 17:51:43 107 1

原创 软件毕业设计 包含毕设和论文

java毕业设计 论文

2022-09-18 17:24:19 104

原创 Java中实现原子操作

可以通过锁和循环CAS的方式来实现原子操作1.锁的方式之前说过,不在详细说明。2.循环cas的方式也可以实现jvm中的cas操作使用到处理器提供的CMPXCHG指令实现。自旋cas实现的基本思路就是循环进行cas操作直到成功为止。具体类的操作可以参考juc下atomic包内的原子类。Atomic包的类基本都是使用Unsafe实现的包装类。原子更新基本类型类AtomicIntegerAtomicLongAtomicBoolean以AtomicInteger为例public final bo

2022-02-21 14:49:58 651

原创 CountDownLatch和CyclicBarrier

什么是CountDownLatchCountDownLatch能够使一个线程等待其他线程完成各自的工作后再执行。使用场景:zookeeper分布式锁 Jmeter模拟高并发等。CountDownLatch如何工作的?CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1.当计数器值到大0时,表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。什么是CyclicBarrier栅栏屏障,让一组线程到达一

2022-02-20 17:35:07 940

原创 Semaphore

什么是SemaphoreSemaphore的作用是控制访问特定资源的线程数目,底层依赖AQS的状态State,是比较常用的一个工具类。Semaphore的构造方法:public Semaphore(int permits) { sync = new NonfairSync(permits); }public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) :

2022-02-19 22:25:24 146

原创 阻塞队列BlockingQueue

什么是BlockingQueueBlockingQueue是juc包提供的用于解决并发 生产者-消费者最有用的类,他的特性是在任意时刻只有一个线程可以进行take或者put操作,并且BlockingQueue提供了超时return null的机制,很多生成场景里都可以看到这个工具。ArrayBlockingQueue队列基于数组实现,容量大小在创建ArrayBlockingQueue对象时已定义好应用场景:在线程池中有比较多的应用,生产者消费者中。他是基于ReentrantLock保证线程安全的,

2022-02-19 21:08:25 719

原创 AQS源码解析(ReentrantLock)

实例化public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();}fair为true是公平锁,false为false是非公平锁。公平锁的lock()方法final void lock() { acquire(1); }public final void acquire(int arg) { if (!tryAcquire(ar

2022-02-08 15:12:52 179

原创 AQS抽象队列同步器

AQSJava并发编程大多数同步器实现都是围绕着共同的基础行为,比如等待队列,条件队列,独占获取,共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态state的同步器。涉及到自旋(实际就是一个循环)使用LocksSuport阻塞线程cas保证一些操作的原子性queue队列ReentrantLockReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的

2022-02-07 15:55:17 286

原创 synchronized

synchronizedsynchronized关键字被编译成字节码后,会被翻译成monitorenter和monitorexit两条指令,分别在同步块逻辑代码的起始位置和结束位置。每个同步对象都有自己的Monitor。1.使用Monitor.Enter得到对象Object的监视器锁,2.如果Monitor.Enter成功执行同步业务3.执行完业务释放锁 Moniter.Exit4.如果第2步失败,把这次请求的线程放到同步队列中SynchronizedQueue中,当第三步执行完,出队列,再尝试

2022-02-03 16:19:42 447

原创 JMM--

数据同步的八大原子操作1.lock 作用于主内存中的变量,把一个变量标记为一条线程的独占状态。2.unlock 作用于主内存中的变量,把一个处于锁定状态的变量释放出来,释放后的变量才能被其它线程锁定。3.read 作用于主内存中的变量,把一个变量值从主内存中传输到线程的工作内存中,以便下来的load操作使用。4.load 作用于工作内存的变量,他把read操作从主内存中得到的变量值放入工作内存的变量副本中。5.use 作用于工作内存中的变量,把工作内存中的一个变量值传递给执行引擎。6.assig

2022-02-02 23:42:45 339

原创 ZGC收集器

ZGCZGC是一款JDK11中新加入的具有实验性质的低延迟垃圾收集器。ZGC的主要目标有四个1.支持TB量级的堆,应该可以满足以后很多年的需求了。2.最大GC停顿时间不超过10ms。3.未来GC特性的基础4.最糟糕的情况下吞吐量会降低15%ZGC没有分代的,这个也可能是暂时的,因为大部分对象都是朝生夕死的, 还有是因为zgc实现分代比较困难,所以可能后续会加上。ZGC的内存布局ZGC 收集器是一款基于region内存布局的,没有进行分代。使用读屏障、颜色指针等技术来实现可并发的标记-整理

2021-12-30 23:10:55 408

原创 G1垃圾收集器

G1收集器G1(Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备对个处理器以及大容量内存的机器。可以极高概率满足GC停顿时间要求,还有高吞吐量性能的特性。G1把java堆划分成为多个大小相等的独立区域(Region),JVM最多可以有2048个Region。一个region的大小是堆大小除以2048,如果堆的大小是4096M,region的大小是2M,当然也可以使用参数“-XX:G1HeapRegionSize”手动指定region的大小,但是还是推荐默认的计算方式。G1还是保留

2021-12-28 22:44:54 160

原创 java jvm 垃圾收集器

jvm垃圾收集器1.Serial收集器 -XX:+UseSerialGC -XX:+UseSerialOldGCSerial 串行收集器是最基本的垃圾收集器,它是一个单线程的垃圾收集器,而且他在工作的时候必须暂停其它所有的工作线程(Stop The World)直到他收集结束。新生代采用复制算法,老年代采用标记整理算法。设计者们在后续的垃圾收集器设计中停顿时间在不断缩短。Serial垃圾收集器简单高效,没有线程的交互开销,可以获得很高的单线程收集效率。SerialOld收集器在1.5以及以前

2021-12-25 23:41:13 190

原创 java jvm垃圾收集算法

垃圾收集算法1.分代收集理论:垃圾收集器一般都采用分代收集算法,可以根据对象存活周期的不同将内存分为几块,一般都是把java堆分为年轻代和老年代,可以根据各个年代的特点选择合适的垃圾收集算法。2.标记复制算法:此种算法可以解决效率问题。它将内存分为大小相同的两块,每次使用其中的一块,当这一块的内存使用完以后,就将还存活的对象复制到另外一块去,然后再把使用的空间一次清理掉。每次内存的回收都是对内存的一半进行回收。3.标记清除算法:该算法分为标记和清除两个阶段,标记存活的对象,统一回收所有没有被标

2021-12-21 11:47:30 309

原创 如何判断java对象要被jvm回收

如何判断java对象是否要被回收1.引用计数法给对象中添加一个引用计数器,每当有一个地方引用他,计数器就加一,当引用失效计数器就减一;计数器为0的对象就是不可能再被使用的。好处:方法简答 高效;但是大多数虚拟机没有使用此种方式;坏处:因为他很难解决对象之间互相引用的问题。可达性分析算法将GCROOTS对象作为起点,从这些节点开始向下搜索引用的对象,能找到的对象都标记为非垃圾对象,其余未标记的都是垃圾对象;常见的引用类型1.强引用:普通的变量引用2.软引用:将对象使用SoftReferenc

2021-12-17 16:32:14 525

原创 java对象创建的过程

java对象创建的过程1.类加载检查,是否已经加载了此类,没有则加载此类,加载过了分配内存2.分配内存后进行初始化3.初始化后设置对象头4.执行构造方法类加载检查虚拟机遇到一条

2021-12-17 13:17:08 640

原创 【JVM整体结构和内存模型】

JVM整体结构和内存模型1.jvm虚拟机分为三大块:类装载子系统 字节码执行引擎 运行时数据区2.运行时数据区分为:本地方法栈 栈 堆 方法区(元空间) 程序计数器1.程序计数器:当前线程执行的java字节码的行号指示器,为了线程能够恢复到正确的位置。每条线程都有一个独立的程序计数器,如果正在执行的是native方法,这个计数器的值则是空。此区域没有规定OOM的情况。2.java虚拟机栈:也是线程私有的,他的生命周期和线程相同,描述的java方法执行的内存模型,每一个方法在执行的时候都会

2021-12-16 14:48:32 390

原创 类加载器之双亲委派机制

java类加载器的分类和双亲委派流程

2021-12-16 12:02:10 67

原创 java类加载

java类加载机制

2021-12-16 10:08:59 983

原创 如何自己实现MyBatis框架,探究其中原理

如何自己实现MyBatis框架通过本章节的学习,对mybatis的一级缓存,mapper接口没有实现类底层是如何处理的 xml的处理 有所了解1.自定义实体类2.自定义mapper接口3.jdbc工具类4.自定义AdminMapper.xml配置文件5.xml解析工具类6.代理类7.测试类通过本章节的学习,对mybatis的一级缓存,mapper接口没有实现类底层是如何处理的 xml的处理 有所...

2020-03-24 09:41:37 113

JAVA spring 实现的毕业设计 城市书房管理系统带论文

JAVA ssm 实现的毕业设计 城市书房管理系统带论文

2022-03-10

java连接池的开发,功能全面方面学习,技术多元化.rar

使用反射来开发连接池,还有自定义注解的使用,功能很全面

2021-12-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除