黄枫谷

勿在浮沙筑高台。

上一篇 文章中,我们介绍了几种可以作为索引的数据结构,并指出了它们的适用场景,随后又分析了 InnoDB 索引的数据结构模型。今天我们继续来聊聊跟 MySQL 索引相关的概念。

阅读全文 »

提到数据库索引,我们并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,我们可能就会说『给某个字段加个索引吧』之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就一起来聊聊这个话题吧。

阅读全文 »

简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务是在引擎层实现的。虽然 MySQL 是支持多引擎的系统,但不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。

阅读全文 »

假设你有个最简单的表 test,表里只有一个 id 字段,在执行 select * from test where id=3 这个查询语句时。我们只看到『输入一条语句,返回了一个结果』,却不知道这条语句在 MySQL 内部的执行过程。所以今天我想和你一起把 MySQL 拆解一下,看看里面都有哪些『零件』。

阅读全文 »

我们知道,数据结构和算法本身解决的是『快』和『省』的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这就是我们今天要介绍的内容:时间、空间复杂度分析。

阅读全文 »

并发处理的广泛应用是 Amdahl 定律 代替 摩尔定律 成为计算机性能发展源动力的原因。Amdahl 定律描述了处理器并行运算之后运行效率提升的情况,而摩尔定律表明了处理器晶体管数量与运行效率之间存在正相关性。这两个定律的更替代表了近年来硬件从追求处理器频率到追求多核心并行处理的发展过程。

阅读全文 »

上一篇 我们主要是介绍编译期的代码优化,今天来介绍一下运行期的代码优化。在部分的商用虚拟机中(Sun HotSpot、IBM J9),Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块运行的特别频繁时,就会把这些代码认定为『热点代码』(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码并进行优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT 编译器)。

阅读全文 »

因为 Java 代码到机器码之间还存在着字节码,所以 Java 语言的『编译期』其实是一段不确定的过程。它可能是指一个前端编译器把 *.java 文件转变成 *.class 文件的过程;也可能是指虚拟机的运行期编译器(JIT 编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用提前编译器(AOT 编译器,Ahead Of Time Compiler)直接把 *.java 文件编译成机器码的过程。

阅读全文 »

JVM 在 new 一个对象的时候,会先查看对象所属的类有没有被加载到内存。如果没有的话,就通过类的全限定名来加载,等类加载完成之后,再创建对象。总的来说, new 一个对象可以分为两个过程:类加载和创建对象。

阅读全文 »

前文介绍了常见的对象存活判定算法和垃圾收集算法,Java 虚拟机实现这些算法时,必须对算法的执行效率有严格的考虑,才能保证虚拟机高效运行。下面我们来看看 HotSpot 虚拟机的具体实现。

阅读全文 »
0%