![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 84
以前你的名字
这个作者很懒,什么都没留下…
展开
-
JVM调优第十节
执行命令:java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.mashibing.jvm.gc.T15_FullGC_Problem01。–XX:CMSInitiatingOccupancyFraction 92% 可以降低这个值,让CMS保持老年代足够的空间。6585 -> 2770:整个堆的情况。6144->640:收集前后的对比。解决方案:降低触发CMS的阈值。(6144):整个年轻代容量。原创 2023-01-11 20:15:36 · 324 阅读 · 1 评论 -
JVM调优第九节
用jvm都会溢出,mycat用崩过,1.6.5某个临时版本解析sql子查询算法有问题,9个exists的联合sql就导致生成几百万的对象(来自 死物风情)小米云,HBase同步系统,系统通过nginx访问超时报警,最后排查,C++程序员重写finalize引发频繁GC问题。OOM产生的原因多种多样,有些程序未必产生OOM,不断FGC(CPU飙高,但内存回收特别少) (上面案例)如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的?原创 2023-01-10 22:32:58 · 370 阅读 · 0 评论 -
JVM调优第八节
jstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole/jvisualVM/ Jprofiler(最好用)https://www.cnblogs.com/liugh/p/7620336.html (简单做法)作业:1:写一个死锁程序,用jstack观察 2 :写一个程序,一个线程持有锁不释放,其他线程等待。搜索jstack dump的信息,找 ,看哪个线程持有这把锁RUNNABLE。为什么阿里规范里规定,线程的名称(尤其是线程池)都要写有意义的名称。原创 2022-10-27 20:53:10 · 82 阅读 · 0 评论 -
JVM调优第七节
根据需求进行JVM规划和预调优优化运行JVM运行环境(慢,卡顿)解决JVM运行过程中出现的各种问题(OOM)原创 2022-10-26 20:45:35 · 75 阅读 · 0 评论 -
JVM调优第六节
根据需求进行JVM规划和预调优优化运行JVM运行环境(慢,卡顿)解决JVM运行过程中出现的各种问题(OOM)原创 2022-10-25 21:34:58 · 82 阅读 · 0 评论 -
JVM调优第五节
提示:结合GC, 一直创建字符串常量,观察堆,和Metaspace。如何证明1.7字符串常量位于Perm,而1.8位于Heap?JVM可以直接访问的内核空间的内存 (OS 管理的内存)NIO , 提高效率,实现zero copy。 取PC中的位置,找到对应位置的指令;原创 2022-10-24 21:28:56 · 67 阅读 · 0 评论 -
JVM调优第四节
project structure - project settings - library 添加该jar包。注意Premain-Class这行必须是新的一行(回车 + 换行),确认idea不能有任何错误提示。当一个对象计算过identityHashCode之后,不能进入偏向锁状态。src目录下创建META-INF/MANIFEST.MF。在需要使用该Agent Jar的项目中引入该Jar包。新建项目ObjectSize (1.8)创建文件ObjectSizeAgent。原创 2022-10-23 19:47:01 · 65 阅读 · 0 评论 -
JVM调优第三节
协议很多intel 用MESI现代CPU的数据一致性实现 = 缓存锁(MESI …) + 总线锁读取缓存以cache line为基本单位,目前64bytes位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响的伪共享问题伪共享问题:JUC/c_028_FalseSharing使用缓存行的对齐能够提高效率。原创 2022-10-20 21:42:47 · 89 阅读 · 0 评论 -
JVM调优第二节
动态语言支持java.lang.invoke.MethodHandle解析的结果为REF_getstatic REF_putstatic REF_invokestatic的方法句柄时,该类必须初始化;overwrite findClass() -> defineClass(byte[] -> Class clazz)(重写模板方法findClass,调用defineClass)父加载器不是“类加载器的加载器”,也不是“类加载器的父类加载器”加密(自定义加载器加载自加密的class,防止反编译,防止篡改)原创 2022-10-19 20:37:39 · 66 阅读 · 0 评论 -
JVM调优第一节
3.应用程序、JVM、操作系统之间的关系JVM运行起来以后会向操作系统申请内存空间,申请到一块适合的区域程序运行找JVM,之后JVM会把申请好的空间分配给程序一句话概括 JVM 与操作系统之间的关系:JVM 上承开发语言,下接操作系统,它的中间接口就是字节码。4.== JVM、JRE、JDK 的关系==JVM 是 Java 程序能够运行的核心。但是需要注意,JVM 自己什么也干不了,你需要给它提供生产原料(.class 文件) 。仅仅是 JVM,是无法完成一次编译,处处运行的。它需要一个基本的类原创 2022-10-18 21:50:53 · 373 阅读 · 0 评论 -
多线程与高并发实战第十四节
主页:http://lmax-exchange.github.io/disruptor/源码:https://github.com/LMAX-Exchange/disruptor。原创 2022-10-17 21:02:59 · 103 阅读 · 0 评论 -
多线程与高并发实战第十三节
第一个我们讲了一个Executor这个接口,大家回顾一下这个接口是干什么使的,把线程的定义和执行分开,主要来做线程的执行接口。在这他下面有一个整个的这个线程池的生命周期,它里面的方法都给他定义全的接口ExecutorService,他下面还有AbstractExecutor这个没有和大家说,这个无所谓了,是为了哪些个子类做准备的。然后才是各种各样的ThreadPoolExecutor,把线程池作为一个执行的单元,给他单独出来的这么一个类,然后他的七个参数是需要大家背过的1:corePoolSoze核心线程数原创 2022-10-13 20:45:47 · 151 阅读 · 0 评论 -
多线程与高并发实战第十二节
两个线程,第一个线程是从1到26,第二个线程是从A到一直到Z,然后要让这两个线程做到同时运行,交替输出,顺序打印。那么这道题目的解法有非常多。用LockSupport其实是最简单的。你让一个线程输出完了之后停止,然后让另外一个线程继续运行就完了。我们定义了两个数组,两个线程,第一个线程拿出数组里面的每一个数字来,然后打印,打印完叫醒t2,然后让自己阻塞。另外一个线程上来之后自己先park,打印完叫醒线程t1。两个线程就这么交替来交替去,就搞定了。当时出这道题的时候是想考察wait、notify和noti原创 2022-10-12 21:01:16 · 95 阅读 · 0 评论 -
多线程与高并发实战第十一节
并发容器容器这章是面试特别爱问,这个面试属于是高频中的高频,为什么他特别爱问,因为他牵扯的东西太多了,拿大腿想一下也知道容器肯定是往里面装东西的肯定牵扯到数据结构,数据结构肯定要牵扯到算法,还有一点就是容器本身的一个组织结构也是大家比较爱考的,再一点他又牵扯到高并发,这就是面试的一个重灾区。容器这章得用好多个维度来讲他才能理解的比较透彻,今天,主要还是从线程池使用的角度,为了和后面的线程池做准备。这个容器通过接口来说分为两大类,我们先从大体的结构上来认识他。第一大类Collection叫集合。集合的意思原创 2022-10-11 21:24:34 · 589 阅读 · 0 评论 -
多线程与高并发实战第十节
今天咱们继续讲AQS的源码,在上节课我教大家怎么阅读AQS源码,跑不起来的不读、解决问题就好 — 目的性、一条线索到底、无关细节略过,读源码的时候应该先读骨架,比如拿AQS来说,你需要了解AQS是这么一个数据 结构,你读源码的时候读起来就会好很多,在这里需要插一句,从第一章到本章,章章的内容都是环环相扣的,没学习前边,建议先去补习一下前面的章节。通过ReentrantLock来解读AQS源码AQS大家还记得吗?最核心的是它的一个共享的int类型值叫做state,这个state用来干什么,其实主要是看他的子类原创 2022-10-10 21:55:19 · 71 阅读 · 0 评论 -
多线程与高并发实战第九节
首先我们简单回顾一下前面三节课讲的内容,分别有线程的基本概念、synchronized、volatile、AtomicXXX、各种JUC同步框架(ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、ReadWriteLock-StampedLock、Semaphore、Exchanger、LockSupport),其中synchornized重点讲了一下,包括有synchornized的底层实现原理、锁升级的概念(四种状态:无锁、偏向锁、轻量级锁、重量级锁),原创 2022-10-09 22:18:30 · 261 阅读 · 0 评论 -
多线程与高并发实战第八节
像原来我们写m++你得加锁,在多线程访问的情况下,那现在我们可以用AtomicInteger了,它内部就已经帮我们实现了原子操作,直接写 count.incrementAndGet(); //count1++ 这个就相当于count++。原来我们对count是需要加锁的,现在就不需要加锁了。我们看下面小程序,模拟,我们计一个数,所有的线程都要共同访问这个数count值,大家知道如果所有线程都要访问这个数的时候,如果每个线程给它往上加了10000,你这个时候是需要加锁的,不加锁会出问题。但是,你把它改成At原创 2022-10-08 21:36:22 · 191 阅读 · 0 评论 -
多线程与高并发实战第七节
我们先来看这个volatile的概念,volatile它是什么意思,现在像大的互联网企业的面试,基本上volatile是必会的,有时候他也不会太问,认为你应该会,但是中小企业也就开始问这方面的问题。我们来看一下这个小程序,写了一个方法啊,首先定义了一个变量布尔类型等于true,这里模拟的是一个服务器的操作,我的值为true你就给我不间断的运行,什么时候为false你再停止。测试new Thread启动一个线程,调用m方法,睡了一秒,最后running等于false,运行方法他是不会停止的。原创 2022-09-28 21:41:04 · 71 阅读 · 0 评论 -
多线程与高并发实战第六节
多线程与高并发大概讲六大块,我们先从线程的基本概念开始,给大家复习一下,不知道有多少同学是基础不太好,说什么是线程都不知道的,如果这样的话,花时间去补初级内容的课。什么是叫一个进程?什么叫一个线程?**进程:**做一个简单的解释,你的硬盘上有一个简单的程序,这个程序叫QQ.exe,这是一个程序,这个程序是一个静态的概念,它被扔在硬盘上也没人理他,但是当你双击它,弹出一个界面输入账号密码登录进去了,OK,这个时候叫做一个进程。进程相对于程序来说它是一个动态的概念。原创 2022-09-26 21:19:12 · 66 阅读 · 0 评论 -
多线程与高并发实战第五节
JDK早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过kernel, 系统调用。原创 2022-09-21 21:19:40 · 112 阅读 · 0 评论 -
多线程与高并发实战第四节
注意序列化并非其他程序一直没机会执行,而是有可能会被调度,但是抢不到锁,又回到Blocked或者Waiting状态(sync锁升级)重量级锁(经过操作系统的调度)synchronized早期都是这种锁(目前的实现中升级到最后也是这种锁)数据的不一致(unconsistency),并发访问之下产生的不期望出现的结果。如果临界区执行时间长,语句多,叫做 锁的粒度比较粗,反之,就是锁的粒度比较细。轻量级锁(CAS的实现,不经过OS调度)(无锁 - 自旋锁 - 乐观锁)我们平时所说的"上锁",一般指的是悲观锁。原创 2022-09-19 21:12:25 · 230 阅读 · 0 评论 -
多线程与高并发实战第三节
程序是什么?进程是什么?–> 程序启动 进入内存 资源分配的基本单位线程是什么?–> 程序执行的基本单位程序如何开始运行?–> CPU 读指令 - PC(存储指令地址) ,读数据 Register ,计算, 回写, -> 下一条线程如何进行调度?–> linux 线程调度器(OS)操作系统线程切换的概念是什么?–> Context Switch CPU保存现场 执行新线程,恢复现场,继续执行原线程这样的一个过程。原创 2022-09-16 22:23:02 · 294 阅读 · 0 评论 -
多线程与高并发实战第二节
sleep()方法在睡眠的时候,不到时间是没有办法叫醒的,这个时候可以用interrupt设置标志位,然后呢必须得catch InterruptedException来进行处理,决定继续睡或者是别的逻辑,(自动进行中断标志复位)如果想打断正在竞争锁的线程,使用ReentrantLock的lockInterruptibly()interrupt()不能打断正在竞争锁的线程synchronized()interrupt是否能中断正在竞争锁的线程。原创 2022-09-15 21:42:41 · 63 阅读 · 0 评论 -
多线程与高并发实战第一节
之前的硬件,只有一个CPU之前的OS,只运行一个进程随着多核CPU的出现,人们开始追求对CPU效率的极致压榨多线程的程序随之诞生,但随之诞生的,也是非常难以应对的各种并发bug。原创 2022-09-14 22:03:58 · 84 阅读 · 0 评论