摘要:
最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。 一、mysql架构分析下面是mysql的一个简要架构图: mysql主要分为Serv 阅读全文
摘要:
一、JDK工具先来看看有哪些常用的工具可以辅助我们进行性能调优和问题排查,后面再通过一个具体的示例结合工具来分析调优。1、JDK工具JDK自带了很多性能监控工具,我们可以用这些工具来监测系统和排查内存性能问题。 2、利用 jps 找出进程jps(Java Virtual Machine Proces 阅读全文
摘要:
前面已经提到过很多JVM的参数了,这节再简单汇总下,以及部分不常用的参数。Java启动参数共分为三类: 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容,如 -version、-classpath 非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满 阅读全文
摘要:
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能。通常而言,内存溢出问题对系统是毁灭性的,它代表VM内存不足以支撑程序的运行,所以—旦发生这个情况,就会导致系统直接停止运转,甚至会导致VM进程直接崩溃掉。O 阅读全文
摘要:
一、内存调优的目标新生代的垃圾回收是比较简单的,Eden区满了无法分配新对象时就触发 YoungGC。而且新生代采用的复制算法效率极高,加上新生代存活的对象很少,只要迅速标记出这少量存活对象,移动到Survivor区,然后快速回收掉Eden区,速度很快。一般一次YoungGC就耗费几毫秒或几十毫秒, 阅读全文
摘要:
接下来我们就通过一些demo结合着GC日志分析下什么时候会触发GC,以及对象在堆中如何分配流转的。1、对象首先分配到Eden区我们通过如下这段程序来验证下对象首先是分配到 Eden 区的: static final int _1M = 1024 * 1024; @RequestMapping(val 阅读全文
摘要:
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存 阅读全文
摘要:
1、设置JVM内存1)JVM内存分配有如下一些参数: -Xms:堆内存大小 -Xmx:堆内存最大大小 -Xmn:新生代大小,扣除新生代剩下的就是老年代大小 -Xss:线程栈大小 -XX:NewSize:初始新生代大小 -XX:MaxNewSize:最大新生代大小 -XX:InitialHeapSiz 阅读全文
摘要:
垃圾回收算法是内存回收的方法论,垃圾回收器是内存回收的实践者。不同的垃圾回收器有不同的特性,并没有一个万能或最好的垃圾回收器,只能根据不同的业务场景选择最合适的垃圾回收器,所以这节就来了解下各个垃圾回收器的特性。1、Stop The World(STW)先看看jvm的 “Stop The World 阅读全文
摘要:
1、分代收集理论大部分虚拟机的垃圾回收器都是遵循“分代收集”的理论进行设计的,它的核心思想是根据对象存活的生命周期将内存划分为若干个不同的区域。一般至少将堆划分为新生代和老年代两个区域,然后可以根据不同代的特点采取最适合的回收算法。在新生代中,每次垃圾回收时都有大量对象死去,因为程序创建的绝大部分对 阅读全文