索引:基础篇 Sticky | 2022-01-25| MySQL 索引 | InnoDB - 索引 - 哈希表 - B+ 树 索引:基础篇索引概述
索引的主要内容主要涉及四个问题:
什么是索引?索引在数据库中究竟起什么作用?
为什么要使用索引?不使用索引会存在什么问题吗?
索引是如何实现的?或者说是采用哪些数据结构实现的?
MySQL 索引有哪些常见的类型?各类索引适用的场景以及存在的问题是什么?
索引相关的面试内容基本离不开这四个问题,也就是说这四个问题基本涵盖了索引的所有核心内容;在实际工作的时候就需要 ...
Read more 垃圾回收-垃圾回收器 Sticky | 2021-09-28| Java 虚拟机 垃圾回收 垃圾回收器概述:::warning
① 垃圾回收器是虚拟机中具体执行垃圾回收的部分,也是垃圾回收算法的具体实现
② 不过后续许多的垃圾回收器并不是严格使用此前提到的算法,有非常多不同的改进
③ Java 社区中的许多公司都开发了自己的虚拟机,诸如 IBM、Oracle、RedHat 等等
④ 不同的公司研发的不同的虚拟机,以及虚拟机的逐步改进,可能会让初看的同学感到混乱
⑤ 所以我打算先把垃圾回收 ...
Read more 垃圾回收-垃圾回收算法 Sticky | 2021-09-28| Java 虚拟机 垃圾回收 垃圾回收算法概述
两类不同的垃圾回收算法
依据:[依据判断对象消亡的方式划分的两类垃圾回收算法]{.red}
分类:
引用计数式垃圾收集(Referrence Counting)
追踪式垃圾收集(Tracing GC)
细节:Java 虚拟机中采用的是追踪式垃圾收集,所有以下所有算法都是基于追踪式垃圾收集
:::info
① 希望了解更多关于垃圾回收算法的相关内容可以阅读《垃圾回收算法手 ...
Read more 垃圾回收-概述 Sticky | 2021-09-28| Java 虚拟机 垃圾回收 | Java 虚拟机 - 垃圾回收机制 概述垃圾回收机制简介什么是垃圾回收机制?
1. 先来聊聊有关垃圾回收机制的历史吧
历史①:垃圾回收机制也称为自动内存管理,旨在由虚拟机自动管理内存空间而不需要开发者的介入
历史②:Lisp 语言是世界第一门采用动态内存分配和垃圾收集技术的语言
历史③:手动垃圾回收与自动垃圾回收
手动垃圾回收
代表语言:C/C++
定义:[开发者必须手动调用方法去回收内存中的垃圾]{.blue}
优点:[开发者 ...
Read more 执行引擎-后端编译器 Sticky | 2021-09-24| Java 虚拟机 执行引擎 后端编译器即时编译器
什么是即时编译器?
前提:
虚拟机规范中并没有强制要求必须实现即时编译器,虚拟机可以采用纯解释执行
但是 [即时编译器性能的好坏、对于代码优化质量的高低]{.blue} 却是衡量虚拟机是否优秀的关键标准
名称:即时编译器(Just In Time 编译器)
定义:[负责在 进程运行期间 将 热点探测 决定的字节码指令 编译并且优化 成本地机器指令]{.red}
...
Read more 栈空间-虚拟机栈 Sticky | 2021-09-23| Java 虚拟机 运行时数据区 栈空间 虚拟机栈概述
虚拟机栈基本概念
定义:虚拟机栈依然是一块内存区域
作用:[临时存储所有 已经被调用 的方法拥有的数据]{.red}
组成:[栈帧是虚拟机栈中最小的存储单位]{.red}
每个栈帧对应保存每个被调用的方法,没有被调用的方法是不会产生相应的栈帧进行保存的
每个方法执行结束后,栈帧就会出栈(销毁)
特点:
[虚拟机栈是线程私有空间:每个线程都会占用虚拟机栈的中的 固定空间 ...
Read more 堆空间-TLAB Sticky | 2021-09-23| Java 虚拟机 运行时数据区 堆空间 TLAB:::primary
参考博客:
JVM - TLAB
在TLAB中创建的对象,如何被其他线程共享?
浅析java中的TLAB
:::
什么是 TLAB?
名称:
全称:TLAB(Thread Local Allocation Buffer)
译名:线程本地缓存
定义:[堆中的 伊甸园区 分配给线程的一块较小的“私有”空间]{.red}
在伊甸园区中划分 TLAB 采用的也是 ...
Read more 堆空间-逃逸分析 Sticky | 2021-09-23| Java 虚拟机 运行时数据区 堆空间 逃逸分析:::warning
前提:逃逸分析目前是 Java 虚拟机中比较前沿的技术,并且还很不成熟,需要时间优化
参考博客:JVM对象逃逸
:::
什么是逃逸分析?
定义:编译器根据字节码信息分析对象是否发生逃逸的 [分析技术]{.red}
:::info
① 逃逸分析只是 [代码分析技术]{.red} 而不是 [代码优化技术]{.red}
② 逃逸分析是后续代码优化技术的前提 ...
Read more 堆空间-内存分配 Sticky | 2021-09-23| Java 虚拟机 运行时数据区 堆空间 内存分配:::info
前提:这里对象的分配策略是建立在堆空间中的,不考虑逃逸分析这种例外情况
核心:解决对象如何在堆空间分配的问题
:::
分区概述
伊甸园区:
[几乎所有对象都是在伊甸园区中被创建的,并且在伊甸园区中被销毁]{.red}
[伊甸园区无法存放对象时将会触发 Minor GC]{.red}
幸存者0区/幸存者1区:
开始:[每次仅使用一个分区存放对象,另外一个分区暂时为空] ...
Read more 堆空间-对象创建 Sticky | 2021-09-23| Java 虚拟机 运行时数据区 堆空间 对象创建对象的组成部分
对象头(Header)
实例数据(Instance Data)
对齐填充(Padding)
对象头
对象头图示
对象头详解
[Mark Word]{.red}:
定义:采用 32位/64位 的 Bitmap 数据结构存储对象的运行时相关信息
:::info
32位虚拟机的 Bitmap 数据结构就是32位的,64位的虚拟机的 Bitmap 就是 ...
Read more