技术路上的苦行僧
不怕别人天赋比你高,就怕别人比你更努力
展开
-
性能调优专题(15)之JVM调优实战及常量池详解
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。原创 2024-11-18 15:31:07 · 503 阅读 · 0 评论 -
性能调优专题(14)之JVM调优工具 及调优实战
前置启动程序:事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用。原创 2024-11-15 19:58:50 · 763 阅读 · 0 评论 -
性能调优专题(13)之G1垃圾收集器
G1(Garbage-First)是一款面向服务器的垃圾收集器,主要针对设备多颗处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐性能特征。G1将Java堆划分为多个大小相等的独立区域(Region),JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可以超过该值,但是不推荐。原创 2024-11-15 10:18:03 · 1032 阅读 · 0 评论 -
性能调优专题(12)之垃圾收集器ParNew&CMS与底层三色标记算法详解
当前虚拟机的垃圾收集器都采用分代收集理论,只是根据对象存活周期的不同将内存分为几块。一般Java将堆分为新生代和老年代,这样子我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对的对象死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活机率高,而且没有额外的空间对它进行担保,所以我们必须选择“标记-清除”算法或者“标记-整理算法”进行垃圾收集。原创 2024-11-14 17:14:06 · 1105 阅读 · 0 评论 -
性能调优专题(11)之JVM对象创建与内存分配机制深度剖析
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可。而在JAVA中对象就是可以被进一步分解的聚合量。原创 2024-11-14 10:30:07 · 896 阅读 · 0 评论 -
性能调优专题(10)之JVM内存模型深度剖析与优化
在minor gc过程中对象挪动后,引用如何修改?对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。原创 2024-11-12 18:57:02 · 734 阅读 · 0 评论 -
性能调优专题(9)之从JDK源码级别解析JVM类加载机制
自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。try {//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。原创 2024-11-11 19:22:11 · 884 阅读 · 0 评论 -
性能调优专题(8)之MYSQL全局优化与Mysql8.0新特性详解
从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。原创 2024-11-10 19:14:30 · 1360 阅读 · 0 评论 -
性能调优专题(7)之Innodb底层原理与Mysql日志机制深入剖析
大体来说,Mysql可以分为Server层和存储引擎层两部分。原创 2024-11-09 16:46:00 · 347 阅读 · 0 评论 -
性能调优专题(6)之MVCC多版本并发控制
Mysql在可重复读隔离级别下如果保证事务较高的隔离性,在上一个篇章有详细介绍,同样的sql语句在一个事务多次执行查询结果相同,就算其他事务对数据进行修改也不会影响到当前事务sql语句的查询结果。这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过所有操作加锁互斥来实现的。原创 2024-11-08 11:11:28 · 89 阅读 · 0 评论 -
性能调优专题(5)之深入理解Mysql事务隔离级别与锁机制
我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多并发事务问题,为了解决多事务并发问题,数据库设计了事务的,用一整套机制来解决多事务并发问题。接下来我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理。原创 2024-11-07 14:42:34 · 365 阅读 · 0 评论 -
性能调优专题(4)之Mysql索引优化实战二
关联字段加索引,让mysql做join操作时尽量选择NLJ算法,驱动表因为需要全部查询出来,所以过滤的条件也尽量要走索引,避免全表扫描,总之,能走索引的过滤条件尽量都走索引小表驱动大表,写多表连接sql时如果明确知道哪张表是小表可以用straight_join写法固定连接驱动方式,省去mysql优化器自己判断的时间。straight_join解释:straight_join功能同join类似,但能让左边的表来驱动右边的表,能改表优化器对于联表查询的执行顺序。原创 2024-11-06 14:18:55 · 58 阅读 · 0 评论 -
性能调优专题(3)之Mysql索引优化实战一
1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2、order by满足两种情况会使用Using index。1) order by语句使用索引最左前列。2) 使用where子句与order by子句条件列组合满足索引最左前列。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。4、如果order by的条件不在索引列上,就会产生Using filesort。原创 2024-11-05 17:54:48 · 63 阅读 · 0 评论 -
性能调优专题(2)之Explain详解与索引最佳实践
mysql执行计划explain结果里的key有使用索引,如果select后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra里一般都有using index;覆盖索引一般针对的是辅助索引,整个查询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值。原创 2024-11-04 20:09:21 · 225 阅读 · 0 评论 -
性能调优专题(1)之深入理解Mysql索引底层数据结构与算法
一、前言在这里我们主要是介绍一下几个知识点:索引数据结构、红黑树、Hash、B+树详解; 索引是怎么支撑千万级表的快速查找; 面试常问B+树索引面试题 联合索引底层结构又是怎么样的;二、索引的本质索引是帮助Mysql高效获取数据的排序好的数据结构。这种数据结构MySQL中最常用的就是B+树(B+Tree)。就好比给你一本书和一篇文章标题,如果没有目录,让你找此标题对应的文章,可能需要从第一页翻到最后一页;如果有目录大纲,你可能只需要在目录页寻找此标题,...原创 2022-03-21 11:42:59 · 1191 阅读 · 0 评论