自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 一文道尽数据库底层原理,探讨Mysql调优之道

前段时间看过一部电影,叫做《英雄时代》,里面有句话是这样说的:生活这条狗啊,追的我连从容撒泡尿的时间都没有。是啊,确实如此,可只有当你足够强大起来,我们才能称为最大的玩家。数据库调优慢查询日志慢查询日志是Mysql内置的一项功能,可以记录执行超过指定时间的Sql语句考虑到慢查询日志细节比较多,在这里我专门记录了一部分手记,一起来看一下:相关参数与默认值参数作用默认值log_output日志输出到哪,默认FILE,表示文件;设置成TABLE,则将日志记录到mysql

2021-10-30 18:47:09 489

原创 打通JVM调优第六战-代码缓存区(Code Cache)问题分析

代码缓存区代码缓存区是一块存储编译后代码的区域控制代码缓存区的配置有如下几个:属性作用默认值-XX:InitialCodeCacheSize设置代码缓存区的初始大小 ,以java -XX:+PrintFlagsFinal|grep InitialCodeCacheSize结果为准不同操作系统、不同编译器的值不同-XX:ReservedCodeCacheSize设置代码缓存区大小,以java -XX:+PrintFlagsFinal|grep ReservedCod

2021-10-28 19:48:59 124

原创 打通JVM调优第五战-方法区溢出与直接内存溢出

方法区溢出与直接内存溢出方法区溢出方法区溢出总结直接内存溢出什么是直接内存?直接内存使用场景实战演练分配直接内存总结直接内存溢出问题直接内存总结方法区溢出我们本文主要探讨一下方法区溢出与直接内存溢出。先来回顾一下方法区的知识点:线程共享,用来存储被虚拟机加载的类型信息、常量、静态变量等在JDK8 之前,方法区是用持久代(Perm Gen)实现的,从JDK8 开始持久代被元空间(Metaspace)给代替了。同时方法区也成了一个逻辑上的概念。看下图:方法区的一部分在堆内存,另一部分在元空间

2021-10-27 22:49:47 73

原创 打通JVM调优第四战-栈内存溢出

栈内存溢出关于虚拟机栈与本地方法栈在java虚拟机规范里是这样描述的:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError如果虚拟机的栈内存允许动态扩展,当无法申请到足够内存时,将抛出OutOfMemoryError虚拟机虽然是这样定义的,但是对于我们所熟悉的Hotspot虚拟机有两点意外:栈内存不允许动态扩展统一使用Xss设置栈大小,不区分虚拟机栈还是本地方法栈有的虚拟机是区分的,可以用Xss设置虚拟机栈,Xoss设置本地方法栈看下面一段

2021-10-26 23:59:51 64

原创 打通JVM调优第三战-堆内存溢出排查与分析

笔者有话说纸上得来终觉浅,绝知此事要躬行。这句话笔者一直把它当做自己的座右铭。希望大家也能抱有和笔者一样的姿态,多动手,多实践。让我们用实际行动证明,在我们年轻人的世界,不存在‘不可能’。聊聊内存溢出内存溢出是实际项目中经常会遇到的问题,关于内存溢出,可以细分为:堆内存溢出栈内存溢出方法区溢出直接内存溢出这四类。本文,我们就主要探讨一下堆内存溢出问题。看我下面演示一段容易造成OOM的代码:这段代码很简单,在main方法里面,我们不断地往oomList里面添加元素,然后使用我

2021-10-26 22:39:46 73

原创 打通JVM调优第二战-CPU过高问题定位

CPU过高问题如何定位?本文,我们来聊一下对于CPU过高问题如何定位。如果我们CPU占用率非常高,那么该怎样去定位哪段代码导致CPU过高呢?我们一般可以采用两种方式定位这种问题。top+jstacktop命令是linux中常用的命令,可以查看CPU的运行情况,比如查看CPU占用率,内存使用率等等。我们来演示一下:我们可以看到39331这个进程占用率最高,占用率为0.7%接着我们执行top -Hp 30331然后就可以显示出当前进程里面线程的运行信息我们可以看出来,29537这个线程是占

2021-10-25 23:34:49 61

原创 打通JVM调优第一条战-JVM日志

不同版本的JVM日志差异是比较大的,所以有必要专门探讨一下,首先我们先来看一下JDK 8里的JVM日志是怎么玩的。常用参数这里笔者整理了JDK8一部分相关垃圾收集和运行时的常用参数。JDK 8垃圾收集相关参数G1PrintHeapRegions、GCLogFileSize、NumberOfGCLogFiles、PrintAdaptiveSizePolicy、PrintGC、PrintGCApplicationConcurrentTime、PrintGCApplicationStoppedTime、P

2021-10-25 22:42:09 46

原创 JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)

上篇文章里《JVM常用性能调优工具详解1》我们已经探究了jps、jstat等监控工具,以及jinfo、jmap、jstack、jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcmd。(因为jcmd这玩意细节太多了,整理文档就整理了好几个小时…)jcmdjcmd全称JVM Command,用于将诊断命令请求发送到正在运行的Java虚拟机,从JDK 7开始提供。使用说明命令如下:-f 从文件读取并执行命令-l 列出本机上的所有JVM进程我们先来看一下最简单的jcmd -l

2021-10-24 21:25:17 130

原创 JVM常用性能调优工具详解1

前言工程学科是在不断动手的过程中来细化自己的领域,就像练武功一样,单凭着掌握一身武林绝学是远远不够的,在实战中,如何在多变的环境面前使用合适的招式,怎样出击,应该选择怎样的功法去迎击未知的对手,这往往都是经验之谈,当你踩过了无数的坑,沉淀了无数的线上问题,总结无数的经验,当问题来的时候你能拥有自己独特的见解与方案,你才能所向披靡,战无不胜。当你经验少的时候,要多学会辛苦一下自己,大不了就是比别人多干点活,通过不断编码,不断试错,你才能熟能生巧,慢慢的,我们才会从一个以苦劳展现价值的工程师,发展成一名靠经

2021-10-24 14:39:24 97

原创 面临层出不穷的垃圾收集器我们如何选择?

如何选择垃圾收集器?前面几章,我们已经聊过了七种垃圾收集器,当然,在比较新的JDK版本中,还有低延迟更高效的垃圾收集器,比如:Shenandoah 、 ZGC… 这些内存我们以后再做详细介绍。那么,面临这么多的垃圾收集器,我们如何选择呢?我们可以从三个方面去考虑:你的应用系统关注的主要矛盾点是什么?比如说,某个项目是一个数据分析类的应用系统,我们希望它能更迅速的获得执行结果,那么吞吐量就是主要矛盾点。可以使用Parallel Scavenge而假设,某个应用是一个Web应用,Stop The

2021-10-24 08:33:52 28

原创 深入浅出垃圾收集器-G1收集器

G1收集器前面几篇博文中,我们聊了新生代收集器和老年代收集器(《深入浅出垃圾收集器-新生代收集器》、《深入浅出垃圾收集器-老年代收集器》),这篇文章主要和大家介绍最后一款主流的垃圾收集器 G1收集器。G1收集器的全称是:Garbge First这是一款面向服务器端应用的垃圾收集器,它既可以用于新生代,也可以用于老年代。内存布局G1这款垃圾收集器,它带来了很多革命性的变化,首先是堆内存布局的变化。我们来看一下图:和前面介绍的说有垃圾收集器都不一样,G1把整个java堆划分成了若干个大小相等的

2021-10-23 22:36:08 87

原创 深入浅出垃圾收集器-老年代收集器

老年代收集器上篇文章中,和大家介绍了新生代收集器。这次,我们聊一聊老年代收集器。如果大家没有看过我的《深入浅出垃圾收集器-新生代代收集器》这篇文章的话,建议先去阅读后,再来学习这篇文章。Serial Old收集器也叫串行老年代收集器,可以认为它是Serial收集器的老年代版本。但是,它采用的是标记整理算法。它的执行过程大致是这样的:可以看出,他和Serial收集器相比,除了使用的算法不一样以外,其他和Serial收集器都是一样的。Serial收集器有哪些适用场景呢?可以和Serial/P

2021-10-23 18:46:10 62

原创 深入浅出垃圾收集器-新生代收集器

垃圾收集器前面我们已经详细探讨了垃圾收集算法,我们这次探讨一下垃圾收集器。垃圾收集算法为实现垃圾回收提供强有力的理论支持。而垃圾收集器则是利用垃圾收集算法,实现垃圾回收的实践落地。那么和垃圾收集算法类似,java也提供了多种垃圾收集器,不同的垃圾收集器也有不同的特性以及适用场景,甚至不同的垃圾收集器之间还可能存在配合使用的关系。那么使用起来还是比较复杂的。...

2021-10-23 09:30:09 89

原创 彻底理解分代收集算法

分代收集算法就目前来讲,业界各种商业虚拟机堆内存的垃圾收集,基本上都采用了分代收集。可想而知,分代收集算法有多么重要。分代收集算法的思想是:根据对象的存活周期,把内存分成多个区域,不同区域使用不同的回收算法回收对象。堆内存结构Java 把堆分成了"新生代"个"老年代",我们来看下图:经过分代之后,垃圾回收可以分成以下几类:新生代回收(Minor GC | Young GC)老年代回收(Major GC)清理整个堆(Full GC)由于执行Major GC的时候,也会伴随着一次

2021-10-22 22:16:29 144

原创 打破垃圾回收的第一道壁堡,探究垃圾回收算法

垃圾回收算法这部分文章,我们聊聊垃圾回收算法,主要有五种垃圾回收算法标记清除算法标记整理算法复制算法分代收集算法增量算法标记清除(Mark-Sweep)标记需要回收的对象(这个过程其实就是前文中所提的通过可达性分析判断对象是否需要回收的过程)清理掉要回收的对象标记清除算法的有一个缺点,就是在清除之后会存在垃圾碎片标记整理(Mark-Compact)标记需要回收的对象把所有的存活的对象压缩到内存的一段清理掉边界外的所有空间复制算法(Copy)复制算法大致是这样玩的

2021-10-21 23:19:12 88

原创 初步探讨垃圾回收机制

写在前面社会上难免会有各种各样的偏见,年龄可以被否认,学历可以被否认,能力可以被否认,经验也可以被否认,但否认不了的,是我们年轻人一往无前的干劲,当有一天你能正确的接受和看待各种各样的偏见,不与他人相争,不与他人相比。静下心来,做自己的领域,成为自己心里的专家,做自己的偶像。万物没有什么可以争议,万事也没有什么值得惊奇,走自己的路,让别人说去吧。大话垃圾回收我们来探讨一下垃圾回收这个话题,垃圾回收是性能调优的重中之重,绝对值得我们深入研究。垃圾回收的内容水非常的深,细节也非常的多,小飞龙在准备这篇文

2021-10-21 21:31:25 113

原创 聊聊逃逸分析、标量替换与栈上分配

逃逸分析分析变量能否逃出他的作用域全局变量赋值逃逸方法返回值逃逸实例引用逃逸线程逃逸我们看下面一段代码:这段代码演示了三种逃逸的场景。public static SomeClass someClass;//全局变量赋值逃逸public void globalVariablePointerEscape() { someClass = new SomeClass();}这段代码里,我们把一个局部变量赋值给了一个静态变量,局部变量的作用域是在方法内部,类变量的作用域是在类里

2021-10-20 23:01:39 62

原创 大透编译器,聊聊方法内联

方法内联上篇文章中,和大家聊过JVM会用编译的方式为代码提速,那在这个基础上,即时编译器还做了很多的优化措施,从而进一步的提升性能,我们这次聊的方法内联就是即时编译器优化措施之一。来看下这段代码:private static int add1(int x1, int x2, int x3, int x4){ return add2(x1, x2) + add2(x3, x4);}private static int add2(int x1, int x2) { return x1 + x2;

2021-10-20 20:45:43 41

原创 侃侃编译器优化

字节码是如何运行的?首先我们先探讨一下字节码是如何运行的,众所周知,java有两种运行模式,一种叫解释执行,一种叫编译执行:解释执行:由编译器一行一行翻译执行编译执行:把字节码翻译成机器码,直接执行机器码下面我们来对比一下这两种执行模式:解释执行:优势在于没有编译的等待时间性能相对差一些编译执行:运行效率会高很多,一般认为比解释执行快一个数量级带来了额外开销那么怎样去查询Java是解释执行还是编译执行的呢?很简单,执行 java -version就可以了我们可

2021-10-19 23:49:24 72

原创 深研JVM 探讨类加载过程

类加载过程我们都知道,编写的java代码是不能直接运行的,需要编译成class文件才行,这个编译需要通过javac命令就可以实现。然而生成的class文件是一个二进制文件,是不方便我们阅读的,我们需要通过javap命令进行反编译。比如,我下面一段代码反编译后是这样的内容:我们分析一下反编译之后的结果可以看到 一个class文件包含了几部分第一部分:是类的描述信息,他记录了类的存储位置,最后一次修改时间,md5值,以及从哪个java类里编译出来的第二部分:还是一些描述信息,主要描述了这个类是

2021-10-18 22:37:02 249 2

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除