- 博客(22)
- 问答 (1)
- 收藏
- 关注
原创 Vue+Springboot2.6.4集成activiti6.0及图形化设计器
springboot2.6.4 vue2.x集成activiti6.0.0及图形界面
2022-03-22 10:06:14 5560 7
原创 JVM(四)内存屏障与JVM指令
一、JVM级别内存屏障这种软件层级的屏障一定是依赖于cpu硬件级别的屏障。以下的屏障指的是屏障两边的操作,JVM只是一个规范,具体实现根据不同虚拟机不同。1. LoadLoad屏障2. StoreStore屏障3. LoadStore屏障4. StoreLoad屏障二、volatile1. volatile实现的细节:① 字节码层面:编译之后翻译为字节码;编译之后的修饰符字节码可以发现0x0040(ACC_VOLATILE)② JVM层面其次是交给虚拟机层级;当虚拟
2020-05-17 13:53:28 1255
原创 JVM(三)【Linking Initializing JMM】
JVM(三)【Linking Initializing JMM】一、Linking1. Verification2. preparation3. resolution二、Initializing1. 调用类初始化代码,给静态成员变量赋初始值。三、JMM1. 硬件层的并发优化基础知识(深入理解计算机系统 原书第三版 P421)一、Linking1. Verification检验加载的文件是否符合JVM规定2. preparation静态成员变量赋默认值3. resolutionclas
2020-05-14 15:08:36 444 3
原创 JVM(二)详解Class加载过程
Class Loading Linking Initializing (类编译-加载-初始化)一、Loading 类加载器(classloader):1. 任何一个class都是classloader(有上图多个加载器)把它load到内存的,load的过程是: ①把二进制码存入内存 ②创建一个class对象指向这块区域 以后使用的都是这个class对象然后指向的这块区域,这个class对象不在栈中,在metaspace(1.8之后出现的) 上图中从下往上是父加载器,但不是继承的关系
2020-05-12 16:04:29 304
原创 JVM(一)入门及Class文件格式
一、JVM基础(Java Virtual Machine) 1. java编码到执行: 执行次数多的部分会被JIT即时编译。 JVM虚拟机帮助屏蔽了不同操作系统的底层,实现了跨语言的平台,java跟jvm无关。 跨语言:只要能产生class文件,就能被JVM所应用。 jvm是一种规范。 官方文档: https://docs.oracle.com/en/java/javase/13/ 中Specifications-language And Virtual htt
2020-05-12 15:47:26 289
原创 多线程与高并发编程(九)
多线程与高并发编程(九)一、JMH(测试方法工具)简单介绍1. 测试准备步骤2. 注解二、Disruptor1. 特点:无锁高并发,使用环形Buffer,直接覆盖(不清除)旧的数据,降低GC频率,实现了基于事件的生产者消费者模式(观察者模式)。2. RingBuffer结构:disruptor是利用数组实现的,而且是首尾相连的环形结构(RingBuffer),内部维护一个sequence(代表下一...
2020-04-29 14:36:26 428
原创 多线程与高并发编程(八)【线程池二】
多线程与高并发编程(八)【线程池二】一、线程池1. SignleThreadPool2. CachedThreadPool3. FixedThreadPool4. ScheduledThreadPool5. WorkStealingPool6. ParallelSteamAPI二、ThreadPoolExecutor源码观后感1. worker类:2. submit方法:3. execute方法:...
2020-04-29 14:23:24 362
原创 多线程与高并发编程(七)【线程池一】
多线程与高并发编程(七)【线程池一】一、线程池前置1. Executor接口 executor()2. ExecutorSevice接口,定义了很多线程池的生命周期的方法3. Callable接口(定义了call()),类似runnable,是一个任务,但是相比runnable中的run()多了个返回值。4. Future接口,承接ExecutorService方法中的返回值,是一个结果5. Fu...
2020-04-07 12:54:14 732
原创 多线程与高并发编程(六)【容器】
多线程容器一、容器补充知识(主要从多线程的使用角度上讲)1. 在物理结构上实际上容器只有两种:数组Array,链表Linked2. 在逻辑结构上的容器非常多。3. Collection一共三种List、Set、Queue(多线程最重要的)4. 容器发展过程 1)从HashTable到CHM 2)从Vector到Queue 3)sync与cas二、多线程容器1. ConcurrentHashMap(...
2020-04-05 13:59:40 294
原创 多线程与高并发编程(五)
多线程与高并发编程(五)一、AQS二、VarHandle三、ThreadLocal(强引用,配合四中的弱引用来读,四、中具体讲了ThreadLocal)四、补充知识五、堆外内存的回收(超纲啦):一、AQSAQS内的state状态通过CAS来改变AQS内的队列的节点添加,也是通过compareAndSetTail(CAS)来改变双向链表是因为需要看前面节点的状态 CAS操作是针对的ta...
2020-04-03 16:09:51 288
原创 多线程与高并发编程(四)
一、面试题第一个问题:–背过!利用以下方法: LockSupport互相在5的时候指定对方锁定解锁。(LockSupport用法在上篇笔记中)第二个问题–背过!利用以下方法: ①Lock lock = new ReentrantLock(); 声明锁 ②Condition producer = lock.newCondition() 这里的newCondition(...
2020-03-25 10:07:06 168
原创 多线程与高并发编程(三)
atomic、sync、longAdder 在大量、特别多并发线程情况下,atomic比sync效率高,longAdder比atomic效率高。 sync慢是因为可能会去申请重量级锁 longAdder内部用了分段锁,分组一起处理,最后合并(比如1000个线程都++,分成四段每段250++,最后四个合并)【只有在特别大并发的情况下才有优势,一般情况下可能还不如其他两种】一、各种同步锁...
2020-03-22 18:26:49 178
原创 多线程与高并发编程(二)
一、Volatile保证线程可见性 MESI 缓存一致性协议(CPU级别)禁止指令重排序 DCL单例(Double Check Lock双重检查锁) 问:在双重检查锁的单例模式中要不要加volatile? 答:要加,一般情况下不加volatile结果仍然不会出问题,【 补充知识: new对象时分为三步: ①给对象申请空间(int类型对象初始设为0) ②给对象...
2020-03-18 20:25:58 231
原创 多线程与高并发编程(一)
一、Thread.sleep() 当前线程睡眠指定时间后回到就绪状态(回到等待队列)Thread.yield() 当前线程直接回到就绪状态(回到等到队列)Thread.join() 让其他线程在此行执行后优先执行,等他执行完了,当前才开始执行this.getState() 当前线程的状态(六大状态,runnable自己算一种,下图里面最大的块是runnable状态)禁止stop()方法...
2020-03-17 15:32:25 505
原创 多线程-生产者消费者问题、线程池
(—接上篇《多线程-线程的生命周期、线程同步与死锁》的完善)一、线程池工作原理步骤 步骤:核心线程池,声明时预估的数量,池内数量的线程同时进行执行,如果没满则新建一个线程处理刚提交来的任务,若池内线程全部在执行任务,进入下一步。阻塞队列,核心线程池满了后再有线程会判断阻塞队列是否满了,阻塞队列没满就将任务放入阻塞队列中,没满就进入下一步。线程池,判断线程池中所有的线程是否都在执行任务...
2020-03-15 14:52:45 317
原创 多线程-线程的生命周期、线程同步与死锁
一、线程操作相关方法注: 在多线程的时候,可以实现唤醒和等待的过程,但是唤醒和等待是Object的方法,唤醒和等待对的是共享对象来说的,而不是针对线程来说的。二、BlockingQueue阻塞队列,JUC包中的(java util concurrent)用法: BlockingQueue blockingQueue = new ArrayBlockingQueue(capa...
2020-03-15 14:35:26 106
原创 多线程高并发基础
一、语法 notify()唤醒 wait()等待 在等待和唤醒时,都是对对象进行操作而不是对当前线程,因为notify和wait都是object方法二、JDK1.5后的JUC帮助实现同步的重复睡眠唤起过程 在A课度线程-线程的生命周期、线程同步与死锁(1)中1:50:00左右开始讲 包路径:java.util.concurrent.BlockingQueue;具体使用: ...
2020-03-14 14:46:11 125
原创 高并发负载均衡:网络协议原理【keepalived】(四)
一、前置 1、出现问题: ①lvs若挂了,单点故障,业务下线。 ②后台的server挂了一个的话,lvs中仍然是两个的记录,访问到达时仍然会负载到两台server中,所以会导致一部分人的业务访问不成功。 2、解决问题: ①单点故障的解决:一变多。 2个思路:多点:形式:a)主备 b)主主 注:主从和主备是不一样的! 3、keepalived的引入 keepa...
2020-03-11 21:25:31 172
原创 高并发负载均衡:网络协议原理(三)
一、LVS负载均衡搭建(linux virtual server)(DR模型) LVS是一个虚拟的服务器集群系统补充知识: /proc目录下的文件只能echo覆盖,不能vi打开,因为vi相当于office,打开一个文件的同时会创建一个虚拟的文件。 一块物理网卡上可以设置多个虚拟IP地址。1)上上图中两份协议: ①响应级别: 默认都是0,外面不知道几个网卡啥的,内部...
2020-03-10 12:49:51 285
原创 高并发负载均衡:网络协议原理(二)
一、Tomcat为什么慢(客户端和服务端的通信)因为Tomcat(nginx等也是一样)是存在应用层的,在网络连接中是最末端的层,处于用户态中,对应用层通信需要先走完下面的物理层-链路层-网络层-传输控制层,进行了下一跳、节点转换、三次握手之后再让内核从内核态切换到用户态才找到了应用层的Tomcat因为Tomcat是基于java语言开发,跑在JVM上,JVM相当于在用户空间中又虚拟了一块空间...
2020-03-08 13:10:36 288
原创 高并发负载均衡:网络协议原理(一)
一台主机最多65535个端口一、OSI七层参考模型(客户端和服务端都有同样的七层模型)软件工程学所强调的分层解耦:应用层:浏览器、tomcat、对外服务的软件表示层:字符串的语义、表示、加密会话层:session等传输控制层:如何连接如何传输的控制(连接失败还是成功)网络层:设备中如何路由数据怎么发链路层:写成一个什么样的协议、具体到写成什么样的东西能发过去物理层:wifi,4...
2020-03-07 15:55:07 492
原创 Redis入门到五大类型实现
service redis_6379 start 服务启动6379端口REDIS的值一共五种类型: String,List,Hash, Set,Sorted Setps -fe | grep redis 查看当前包含redis进程redis-cli 启动redis程序exit 退出redis-cli -h 查看redis代码帮助redis-cl...
2020-02-26 21:52:07 226
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人