自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 【深入理解JVM】(三)JVM内存模型--拿出这张图问面试官:你想从哪开始聊?

文章目录一、基本概念二、运行过程三、线程四、运行时数据区1.程序计数器(线程私有)2.虚拟机栈(线程私有)3.本地方法区(线程私有)4.方法区/永久代(线程共享)5.堆(Heap-线程共享)-运行时数据区5.1 新生代5.1.1 Eden 区5.1.2 ServivorFrom5.1.3 ServivorTo5.2 老年代5.3 永久代/元数据区(Metaspace)5.3.1 永久代5.3.2 元数据区(Metaspace)一、基本概念JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、

2021-07-03 18:18:51 315

原创 【深入理解JVM】(二)类加载机制

一.概述Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。二.类加载时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析

2021-06-14 18:13:27 320

原创 【深入理解JVM】(一)类加载器双亲委派机制源码分析

文章目录概念:一.类加载器种类1.Bootstrap类加载器(启动类加载器)2.Extension类加载器(扩展类加载器)3.App类加载器(系统类加载器)4.Custom(自定义类加载器)二.ClassLoader源码加载一个Class的过程如何体现双亲委派机制1.图解类加载过程2.JDK1.8源码分析类加载过程3.扩展:打破双亲委派机制三.自定义类加载器概念:主要出于安全考虑 类加载器一层层往上找,看是否被加载过,到顶后再一层层往下决定由谁去加载一.类加载器种类1.Bootstrap类加载器(启

2021-06-05 19:39:44 376

原创 【深入理解JVM】(五) JVM调优实战--99%的面试官不知道的原理

不废话上代码public class Test { static long counter; public static void main(String[] args) throws Exception { System.out.println("main start"); startBusinessThread(); startProblemThread(); //等待线程启动 Thread.sleep

2021-07-18 18:18:19 197

原创 【多线程】AQS原理源码分析--以ReentrantLock中的实现为例

一.概念AQS:AbstractQueuedSynchronizer 翻译过来就是抽象队列同步器.是JUC包下的一个重要的抽象类.用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器(信号量,事件等)二.原理以ReentrantLock中的实现为例1.ReentrantLock调用它的lock()方法时,会调用其内部类Sync的lock()方法,进而又调用了其子类NonfairSync的lock()方法,进而会调用acquire(1)方法2.这个acquire(1)方法最终会调用到AQ

2021-06-29 21:59:46 125

原创 Mybatis-plus将查询结果封装到指定实体

需求背景:需要将岗位角色与广告配置建立多对多的关系,通过多选岗位角色作为条件来查询广告配置在网上看了几篇类似的文章,感觉都不太靠谱,自己总结一下关键记录下Mybatis-plus中foreach和collection的使用 还有判断集合使用 list.size > 0废话不多说,直接上代码实体类//广告类@TableName(value = "TB_ADVERTISEMENT")public class Advertisement { @TableId(value = "ID")

2021-06-03 16:32:53 2483 1

原创 使用线程池等待所有任务执行完成后进行其它操作(异步转同步)

需求背景:之前项目组有个需求,大致就是:1.上传一组图片到云后得到所有的url2.拿到所有的进行一系列业务操作3.下载所有之前上传的图片分析:1.上传图片(IO)可以使用多线程执行,提高效率2.需要拿到所有图片上传的结果(url)后才能进行下一步操作解决思路:需要异步转同步操作使用CountDownLatchpublic static void main(String[] args) throws Exception { List<String> pho

2021-05-09 00:34:58 851 1

原创 CAS,ReentrantLock和synchronized总结

概念CAS (compareAndSet(最新) 或compareAndSwap JDK不同版本名称不同)当且仅当原值==期望值时,才更新为新值具体表现为:当一个线程需要修改某个值时,会将原值(即当前线程中该值的副本)跟主内存中的这个值进行比较,如果相等,就更新为新值.例如 count++; 当前线程中count=2(原值); 主内存中的count=2(即期望值);此时count 就执行++操作,更新为count=3(新值)如果此时当前线程中count=2(原值); 主内存中的count=3(即

2021-01-31 21:23:23 558 4

原创 volatile的作用及应用和不适用场景

volatile的作用1.保证线程可见性本质上是使用了CPU 的缓存一致性协议 在inter CPU下使用的是 MESI 协议2.禁止指令重排序public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name

2021-01-31 19:35:05 779 11

原创 JUC--固定容量同步容器实现

JUC–固定容量同步容器实现问题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用代码import java.util.LinkedList;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.c

2021-01-31 18:14:16 168 1

空空如也

空空如也

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

TA关注的人

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