3 bingaPang

尚未进行身份认证

我要认证

good goog study, day day up!

等级
TA的排名 17w+

并发多线程之JUC原理

目录AQS主要属性及主要方法在了解了java内置锁(synchronized)之后,我们来了解下自1.5之后java在java.util.concurrent包中提供的并发工具类,大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS具有以下特性:阻塞等待队列共享/独占公平/非公平

2020-10-25 12:47:13

并发多线程之sychronized

目录对象内存布局synchronized底层原理Jvm内置锁的优化偏向锁和轻量级锁的应用场景锁的膨胀升级过程设计同步器的意义 :多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问。可变:资源可以在其生命周期内被修改。引出的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问那么我们怎么解决线程并发安全问题?实际上,所有的并发模式在解决线程安

2020-10-25 11:21:17

并发编程之volatile关键字

目录volatile的内存语义volatile的可见性volatile的禁止重排优化总线风暴引入synchronizedvolatile的内存语义volatile是Java虚拟机提供的轻量级的同步机制。volatile关键字有如下两个作用 保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一 个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。禁止指令重排序优化。volatile的可见性在JMM的介绍时已经提到,volatile是通过缓刑一致性协议实

2020-10-24 15:52:08

Java的内存模型JMM

标题什么是JMM内存模型JMM内存模型定义的8种操作JMM的原子性JMM的可见性JMM的有序性总结什么是JMM内存模型Java内存模型描述的是一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。从而脱离于操作系统的硬件模型,可以看到JMM内存模型与计算机的硬件有很多相似之处;计算机模型:JMM内存模型:通过制定这个规则,每个JVM实现都遵循这一规则,从而可以使java实现“一次

2020-10-24 15:38:18

并发多线程之线程

目录用户线程和内核线程Java使用的线程JVM中线程的创建new java.lang.Thread().start()使用JNI将一个native thread attach到JVM中Java中实现线程的方式线程的生命周期线程上下文切换及死锁线程上下文切换死锁什么是线程?现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度CPU的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个

2020-10-22 22:39:59

缓存一致性协议:MESI

目录缓存一致性问题缓存一致性协议四种状态缓存一致性协议(MESI)流程缓存一致性协议失效总线风暴问题缓存一致性问题在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存 (MainMemory)。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是 也引入了新的问题:缓存一致性(CacheCoherence)。当多个处理器的运算任务都涉及同一 块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步回到主内存时以谁的缓存数据为准呢?为了解决一致性的问题

2020-10-22 18:41:47

volatile禁止重排序的原理-内存屏障

目录JMM中volitile内存语义的实现volitile写的内存屏障volitile读的内存屏障内存屏障的优化内存屏障手动添加程序中,为了更高效的执行,会对代码或者指令进行重排序,在java中程序运行过程中可能会发生以下情况的重排序:编译器优化重排序;指令级并行重排序;内存系统重排序;为了实现volatile内存语义,JMM会分别限制这两种类型的重排序类型。 下图是JMM针对编译器制定的volatile重排序规则表。举例来说:第三行最后一个单元格的意思是:在程序中,当第一个操作为普通

2020-10-22 17:30:25

Mysql优化六:Mysql的锁和事务隔离级别

目录Mysql中的锁锁定义锁分类表锁表锁之读锁表锁之写锁表锁总结行锁行锁支持的事务事务隔离级别行锁展示读未提交读已提交可重复读串行化间隙锁解决幻读无索引行锁会升级为表锁行锁分析死锁优化建议Mysql中的锁锁定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。锁分类从性能上

2020-10-10 11:02:39

Mysql优化五:trace工具使用及排序、分组和分页查询优化

目录trace工具的使用排序和分组优化demo1demo2demo3demo4demo5demo6demo7demo8排序优化总结文件排序(filesort)原理详解文件排序方式分类文件排序方式的选择文件排序方式示例分页查询优化根据自增且连续的主键排序的分页查询根据非主键字段排序的分页查询trace工具的使用Mysql如何合适的选择素引呢?接下来我们来看一个示例。EXPLAIN SELECT * FROM employees WHERE name > 'a';从上述的直接结果可以知道,在查

2020-10-09 14:40:20

Mysql优化四:关联、count、in及exist优化

目录join关联查询优化Nested-Loop Join 算法基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法关联查询总结in和exist优化count的优化join关联查询优化接下来通过实例来了解一下join关联查询的运行原理及优化的思路。首先来看一下两个示例表的结构:t1表的结构如下:DROP TABLE IF EXISTS `t1`;CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a

2020-09-30 10:59:52

Mysql优化三:索引的使用规则和注意事项

条目全值匹配最左前缀法则不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描存储引擎不能使用索引中范围条件右边的列尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少select *语句mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描is null,is not null 也无法使用索引like以通配符开头('$abc...')mysql索引失效会变成全表扫描操作字符串不加单引号索引失效少用or或in,用它查询时,非主键字段

2020-09-27 11:15:49

Mysql优化二:Explain工具列介绍

目录id列select_type列table列type列possible_keys列key列key_len列ref列rows列Extra列使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返 回执行计划的信息,而不是执行这条SQL 。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。在查询中的每个表会输出一行,如果有两个表通过 join

2020-09-24 16:59:43

Mysql优化一:Mysql索引原理

目录索引的概念索引的各种实现及优缺点Mysql中存储引擎的索引实现联合索引数据结构索引的概念索引是帮助MySQL高效获取数据的排好序的数据结构。所以说索引是一种数据结构,用于帮助Mysqll高效查询的数据结构,就像是我们常提到的数组、链表等。如下图所示,索引就像平常使用字典查询一样:索引的各种实现及优缺点可以实现的高效查询的数据结构有以下几种:二叉树红黑树Hash表B-Tree接下来来逐个了解一下上述各个数据结构的优缺点,在介绍之前,先介绍个网页,该网页可以帮助学习数据结构和算法

2020-09-24 11:08:38

ThreadLocal之源码剖析

目录ThreadLocal介绍、示例和原理简单示例ThreadLocal的原理ThreadLocal源码剖析ThreadLocalMap源码分析ThreadLocalMap中元素Entry的实现ThreadLocalMap各个全局属性剖析ThreadLocalMap方法剖析ThreadLocal源码剖析ThreadLocal属性剖析ThreadLocal各个方法剖析ThreadLocal介绍、示例和原理ThreadLocal为线程提供了私有变量保存的方式,每一个线程通过ThreadLocal只能访问自己

2020-09-18 18:29:06

深入JVM十一:JVM常见调优工具

这里写目录标题jmap的使用histo参数的使用heap参数的使用堆内存dumpjinfo的使用flags 参数的使用sysprops参数的使用jstat的使用垃圾回收统计堆内存统计年轻代垃圾回收统计新生代内存统计老年代垃圾回收统计老年代内存统计元空间内存统计jstack的使用jstack定位死锁问题使用jstack找出占用cpu最高的线程jstack展示的线程状态JVM运行情况评估jmap的使用jmap主要用来观察运行的JVM进程的内存情况及内存快照生成,这里只要说明其中的几个参数:histo

2020-09-16 13:47:51

深入JVM十:JVM中的垃圾收集器

标题Serial收集器ParNew垃圾收集器Parallel Scavenge垃圾收集器CMS垃圾收集器Garbage First(G1)垃圾收集器G1对堆内存的划分G1 垃圾收集器的收集过程GC 垃圾收集器的特征G1垃圾收集器的垃圾收集分类G1垃圾收集器常见JVM参数G1垃圾收集器的建议如何选择垃圾收集器如果说垃圾收集算法是垃圾收集的理论的话,那么垃圾收集器就是垃圾收集理论的实现,接下来来分别了解Serial、ParNew、Parallel Scavenge、CMS、G1等垃圾收集器。Serial收集

2020-09-12 21:15:09

深入JVM九:对象的回收判断和垃圾收集算法

这里写目录标题如何判断对象可以回收引用计数法可达性分析算法JVM中的常见引用类型finalize最终判定对象是否存活如何判断一个类是无用类垃圾收集算法标记清除算法标记复制算法标记整理算法分代收集理论如何判断对象可以回收堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)。 那么判断对象是否死亡该如何判断,有引用计数法和可达性分析两种策略。引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1,当引用 失效,计数器就减1,任何时

2020-09-10 12:32:13

深入JVM八:JVM内存分配机制

标题对象优先在Eden区分配大对象直接进入老年代长期存活的对象进入老年代对象动态年龄判断Minor GC后存活的对象Survivor区放不下老年代空间分配担保机制在了解JVM内存分配的机制之前先来了解一下关于垃圾回收的几个术语:Minor GC/Young GC:指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。Major GC/Full GC:一般会回收老年代,年轻代,方法区的垃圾,Major GC的速度一般会比Minor GC的慢10倍以上。接下来来了解一下JVM

2020-09-09 16:43:16

深入JVM七:逃逸分析对对象分配的优化

目录栈上分配标量替换在了解逃逸分析之前我们先来了解一下JVM的即时编译器,即时编译器的工作流程原理如下:Java程序最初运行时通过解析器进行解释执行的,当虚拟机发现某个方法或代码块运行的特别频繁,就会把这些代码认定为“热点代码”,为了提高热点代码的执行效率,在运行时,虚拟机会将这些“热点代码”编译成本地机器吗,并且通过各种手段对代码进行各种的优化。那么在运行期间完成上述功能的就是即时编译器。需要注意的是,这里的编译不是将.java文件编译成字节码文件,而是将字节码编译成中间码或者本地机器码。解析器也是解

2020-09-08 12:21:06

JDK动态代理原理剖析(下)

在JDK动态代理原理剖析(上)中对JDK动态代理的原理机制和自定义代理类生成进行了学习,接下来就来研究一下JDK的动态代理是怎么实现的,梳理梳理一下其源码。在开始研究源码之前,先把其实现思路以及实现方法进行梳理一下,在梳理源码时可以起到很好的作用。首先为了提高性能,JDK动态代理使用了缓存,在Proxy中声明如下:/** * a cache of proxy classes */private static final WeakCache<ClassLoader, Class<?&g

2020-08-28 16:31:24

查看更多

勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取