摘要: 当栈内存中栈帧过多或者栈帧过大,对于第一个原因,每调用一次方法就会在栈中分配一个栈帧。虽然栈帧用完内存就会自动回收,如果调用的方法之间执行的时间长,就有可能出现,最典型的场景就是方法递归调用。比如我们有个代码: 1 public class Demo { 2 // 记录方法调用次数 3 public 阅读全文
posted @ 2020-07-08 10:43 今天你做题了吗 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 比如我们有运行这样一个程序: 了解多线程的小伙版都知道,这段代码不会有打印结果,因为发生了死锁。我们在服务器上运行试试,没有输出,对应的进程是 32752。 使用 “jstack 32752”排查,后面的信息显示 “发现死锁”,在线程1的第29行,等待对象A锁,这就和我们的代码对应起来了。 阅读全文
posted @ 2020-07-07 14:04 今天你做题了吗 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 线上项目运行时,出现问题不像在本地那么容易排查,经常需要借助日志、或者一些工具来找出问题。cpu被占满我们经常会遇到。比如我们有这样一段代码: 1 public Class Demo1_16 { 2 3 public static void main(String[] args) { 4 5 new 阅读全文
posted @ 2020-07-07 13:38 今天你做题了吗 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 只能生成一个实例的类是实现了Singleton(单例)模式的类型。实现单例模式的代码比较短,在面试中经常被提及,这篇随笔介绍几种常见的实现方式。 1.饿汉模式 这种实现方式优点是没有加锁,执行效率高、线程安全的;但是对象在类加载的时候就会被创建,容易产生垃圾对象,正常情况下使用这种方式来创建单例。具 阅读全文
posted @ 2020-07-05 23:11 今天你做题了吗 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 这篇文章我们关注一个问题:Java程序是怎么进入JVM并执行的?经常写Java程序的小伙伴应该都听说过类加载机制,在《深入理解Java虚拟机》里周老师已经讲的很清楚了,这篇随笔把之前的笔记以及一些总结重新梳理一下。前面我们已经知道 .java文件经过编译后变成Class文件,JVM加载的是字节码文件 阅读全文
posted @ 2020-07-04 17:41 今天你做题了吗 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 这篇文章我们主要关注这些问题::Java程序执行完后,堆中的对象什么时候被回收?如何回收? 堆又叫做 “GC堆" 由于现在收集器基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代,比例是1:2;再细致一点新生代内部又划分为Eden区、Survivor区,比例为8:1。下图显示了堆的结 阅读全文
posted @ 2020-07-02 21:25 今天你做题了吗 阅读(505) 评论(0) 推荐(2) 编辑
摘要: 以前学JVM的时候看过《深入理解Java虚拟机》,当时看的很模糊也记了些笔记,更像是为了应付面试。事实是确实把笔记都背上了,春招找实习的时候,内存管理、类加载、垃圾回收三连背一遍。后来自己做项目的时候,涉及到JVM的部分还是不怎么理解,最近重读了上面的书并且看了一些技术大佬的专栏,用博客记录下自己学 阅读全文
posted @ 2020-07-02 12:11 今天你做题了吗 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 我们在建表的时候最好创建自增主键,这样非主键索引占用的空间就比较小。这种方式插入数据都是追加数据,不涉及到数据页分裂。但也不是所有场景下都需要自增主键,比如有些业务场景的需求是只有一个索引并且该索引必须是唯一索引,由于没有其他索引,就不用考虑辅助索引的存储空间消耗,可以直接将这个索引设为主键。 覆盖 阅读全文
posted @ 2020-06-27 21:30 今天你做题了吗 阅读(1196) 评论(0) 推荐(0) 编辑
摘要: 索引的出现是为了提高数据库查询的效率,就像书的目录一样。常见的索引模型有哈希表、有序数组、B+树。 自适应哈希索引(AHI) 哈希表是一种常见的数据结构,即通过哈希算法计算出一个数字在表中的位置,并将数字存入该表。哈希索引就是通过哈希表来实现的,一般情况下查找时间复杂度为O(1)。InnoDB会监控 阅读全文
posted @ 2020-06-26 16:49 今天你做题了吗 阅读(765) 评论(0) 推荐(0) 编辑
摘要: InnoDB体系简要架构如图所示,由后台线程和内存池组成。InnoDB存储引擎是多线程的模型,后台线程包括: Master Thread:主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。 IO Thread:负责写IO请求的回调处理。 Purge Thread:回收已经使用并分配的undo 阅读全文
posted @ 2020-06-25 16:01 今天你做题了吗 阅读(180) 评论(0) 推荐(0) 编辑