![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高并发
郝大侠001
一只程序猿!
展开
-
深入理解Volatile关键字
1.概念volatile是Java虚拟机提供的轻量级的同步机制;而相对应重量级同步机制就是synchronized;2.三个特性保证可见性可见性就是当主内存中变量被某一个线程修改后刷新到主内存,会立即通知其他线程该变量已经被修改。不保证原子性原子性:不可分割,完整性,要么同时成功,要么失败。保证数据的一致性!!!禁止指令重排指令重排:源代码->编...原创 2019-08-03 13:54:33 · 123 阅读 · 0 评论 -
死锁编程定位分析
1.死锁概念死锁是指两个或者两个以上的进程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外力干涉它们将都无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性也就很低,否则就会因争夺有限的资源而陷入死锁。2.死锁原因系统资源不足进程运行推进的顺序不合适资源分配不当class LockThread implements Runnable{ ...原创 2019-08-08 21:56:39 · 287 阅读 · 0 评论 -
五大单例模式
/** * @author DaXia_Hao * @date 2019/8/7 0007 7:59 * * 单例模式的动机,单例模式概述:设计一个任务管理器 * * 1.单线程经典单例模式 * 多线程下容易进入==null后,初始化工作较长,多线程会创建多个线程 * 为了解决问题,两种方式 ...原创 2019-08-07 14:18:13 · 210 阅读 · 0 评论 -
直接内存
1.概念直接内存并不是虚拟机运行时数据区的一部分,而是独立于JVM虚拟机的物理内存。2.特点访问直接内存速度较快。JDK1.4之后引入了NIO(New Input/Output类),引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外的内存,然后通过Java堆中的DirectByteBuffer对象来控制这块内存。内存大小不受堆控制发生OOM只...原创 2019-08-14 20:41:19 · 209 阅读 · 0 评论 -
对象的构建、内存布局、访问
引言当我们写下Object obj = new Object();来创建对象(反射、反序列化也能创建对象)时,JVM到底在堆内存中如何帮我们创建这个对象,这些细节将在下面被解密。1.构建首先是JVM如何分配堆内存空间,主要分为两种,指针碰撞和空闲列表。指针碰撞当堆中采用标记整理算法回收内存时,内存会存在连续的空内存,所以可以采用指针偏移量方式来分配对象空间空闲列表当堆中...原创 2019-08-14 21:24:39 · 190 阅读 · 0 评论 -
GC_JVM垃圾收集器
前言Java堆从GC的角度可以细分为:新生代(Eden区、From Survivor区和To Survivor区)和老年代。1.四种垃圾回收算法这是理论算法,并非具体实现。a.引用计数缺点:每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗。较难处理循环引用;JVM的实现一般不采用这种方式。b.复制优点:没有产生内存碎片(因为整体复制)缺点:相对浪费空间,耗...原创 2019-08-11 21:54:35 · 352 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用
1. 强引用(默认支持模式)当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。强引用是最常见的普通对象引用,只要还有前引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰到这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾机制回...原创 2019-08-12 07:59:14 · 280 阅读 · 0 评论 -
内存泄漏和内存溢出
1.概念首先要区别内存溢出:内存溢出是申请不到内存空间了;内存泄漏是无法回收无用的对象。2.内存泄漏原因数据库连接池、io连接、网络连接单例模式下对象引用监听器静态集合类3.内存泄漏常见异常java.lang.StackOverFlowErrorpublic class StackOverflowErrorDemo { public static void ma...原创 2019-08-12 19:39:44 · 296 阅读 · 0 评论 -
JVM调参
1.查看JVM默认值-XX:+PrintFlagsInitial 主要查看初始默认 公式 java -XX:+PrintFlagsInitial -version java -XX:+PrintFlagsInitial -XX:+PrintFlagsFinal 主要查看修改更新 公式 java -XX:+PrintFlagsFinal -version ...原创 2019-08-12 19:46:39 · 354 阅读 · 0 评论 -
线程池底层源码ThreadPoolExecutor详解
1.选择线程池优势线程池主要控制运行线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量的线程池,则排队等候,等其他线程执行完毕,再从队列中取出任务来执行。1.1特点线程复用降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。控制最大并发数提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。管...原创 2019-08-08 21:45:22 · 326 阅读 · 0 评论 -
阻塞队列
1.概念阻塞队列,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致是:线程1往阻塞队列中添加元素,而线程2从阻塞队列中移除元素。当阻塞队列是空时,从队列中获取元素的操作将被阻塞。当阻塞队列是满时,往队列里添加元素的操作将被阻塞。2.优势在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦满足条件,被挂起的线程又会自动被唤醒。3.使用:BlockingQueue为什...原创 2019-08-05 20:55:15 · 211 阅读 · 0 评论 -
单点登录
1.概念一处登录,多处使用。前提:多是使用在分布式系统中。京东:单点登录,是将token放入到cookie中的。原创 2019-08-03 15:46:30 · 1022 阅读 · 0 评论 -
AtomicInteger
引言为什么AtomicInteger 不用加synchronized也能保证i++原子性;因为用了CAS!!1.CASa.概念比较并交换(compareAndSet)public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new ...原创 2019-08-03 20:44:36 · 191 阅读 · 0 评论 -
ArrayList等集合线程不安全!!
1.ArrayList概念ArrayList底层是数组,初始化大小为10,如果超出采用Arrays.copyOf,扩充代价高,最好之前指定容量大小。int newCapacity = oldCapacity + (oldCapacity >> 1)扩充1.5倍。线程不安全!2.ArrayList线程不安全解决方法List<String> list = new Arra...原创 2019-08-04 13:56:15 · 155 阅读 · 0 评论 -
六个牛逼高逼格Linux命令
1.整机top查看cpu和内存load average:1min 10min 15min负载均衡值(三个值相加再除以3,高于60%说明可以正常使用)uptimetop的简单版2.CPU vmstatvmstat -n 2 3 //每隔2s采集一次,一共采集3次-procsr:运行和等待cpu时间片的进程数,原则上1核不超过2b:等待资源数-cpuus:用户进程消耗sy:系统...原创 2019-08-04 16:01:21 · 4311 阅读 · 0 评论 -
假设生产环境出现CPU占用过高,请谈谈你的分析思路和定位
目的找出引出问题的代码行!日志只能报错代码,不能解决cpu过高的问题步骤先用top命令找出cpu占比最高的确定进程PIDps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序惹事ps -ef | grep 51015101 4063 36 08:25 pts/2 00:11:25 java club.eryastudio.test.Demo2定位到具体线程或者...原创 2019-08-04 16:29:12 · 562 阅读 · 0 评论 -
synchronized和lock有什么区别吗?
1.原始构成synchronized是关键字属于jvm层面monitorenter(底层是通过monitor对象来完成的,其实wait/notify等方法也依赖于monitor对象,只有在同步块或方法中才能调用wait/notify等方法)monitorexitLock是具体类(java.util.concurrent.locks.lock)是api层面的锁2.使用方法synch...原创 2019-08-04 20:24:42 · 3139 阅读 · 0 评论 -
公平锁/非公平锁/可重入锁/自旋锁/独占锁(写锁)/共享锁(读锁)/互斥锁
java七种锁1.公平锁和非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程先申请的线程优先获取锁。在高并发的情况下,有可能会造成优先级反转或者饥饿现象。1.1两者区别公平锁/非公平锁:JUC并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得...原创 2019-08-04 20:50:13 · 759 阅读 · 0 评论 -
CountDownLatch/CyclicBarrier/Semaphore
升级前后对比!!1.CountDownLatch目的:让一些线程阻塞直到另一个线程完成一系列操作后才被唤醒!CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。其他线程调用countDown方法会将计数器减1(调用CountDown方法的线程不会阻塞),当计数器的值变为0时,因调用await方法被阻塞的线程会被唤醒,继续执行。秦灭六国,统...原创 2019-08-04 21:02:16 · 219 阅读 · 0 评论 -
G1垃圾收集器
1.以前收集器特点年轻代和老年代是各自独立且连续的内存块年轻代收集使用单eden+S0+s进行复制算法老年代收集必须扫描整个老年代区域都是以尽可能少而快速地执行GC为设计原则。2.概念G1(Garbage-First)收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。另外还具有一下特性:像CMS收集器一...原创 2019-08-12 20:24:28 · 583 阅读 · 0 评论