再见,我的四年生活

不需要也不想说太多,只想记录下这个特殊的日子。 再见,一起奋斗的团队;再见,回不去的岁月,希望一切安好,相信时间会给出最好的答案!

JVM 类加载机制

类的生命周期 通常类的声明周期包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) 其中解析过程在某些情况下可以在初始化阶段之后再开始,这是为了支持 Java 的动态绑定。 类初...

JVM 垃圾收集 - 垃圾收集器

以上是 HotSpot 虚拟机中的 7 个垃圾收集器,连线表示垃圾收集器可以配合使用。 Serial 收集器 Serial 收集器是单线程的收集器,不仅意味着只会使用一个线程进行垃圾收集工作,更重要的是它在进行垃圾收集时,必须暂停所有其他工作线程,往往造成过长的等待时间。 它的优点是简单高效,对于单个 CPU 环境来说,由于没有线程交互的开销,因此拥有最高的单线程收集效率。 ...

JVM 垃圾收集 - 垃圾收集算法

JVM中,垃圾收集算法主要分为复制、标记清除、标记整理、分代收集几种: 标记-清除算法 将需要回收的对象进行标记,然后清除 不足: 标记和清除过程效率都不高 会产生大量碎片 之后的算法都是基于该算法进行改进。 复制算法 将内存划分为大小相等的两块,每次只使用其中一块,当这一块内存用完了就将还存活的对象复制到另一块上面,然后再把使用过的内存空间进行一次清理。 优...

JVM 垃圾收集 - 对象可回收判断

在 JVM 内存模型[1] 中, 程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行。 引用计数 给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。当两个对象出现循环引用时,引用计数器永远...

JVM 内存模型

Jvm 内存模型主要包括程序计数器(寄存器)、虚拟机栈、本地方法栈、堆、方法区、运行常量池、直接内存几部分组成。 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是 Native 方法则为空)。 当有多个线程交叉执行时,被中断的线程的程序当前执行到哪条内存地址会被保存下来,以便用于被中断的线程恢复执行时再按照被中断时的指令地址继续执行下去。 为了线程切换后能恢复到...

Markdown 语法总结

基础语法 斜体和粗体 使用 * 和 ** 表示斜体和粗体。 示例: 这是 斜体,这是 粗体。 分级标题 使用 # 表示一级标题,使用 ## 表示二级标题,使用 ### 表示三级标题, 示例: # 这是一个一级标题 ## 这是一个二级标题 ### 这是一个三级标题 外链接 使用 [描述](链接地址) 为文字增加外链接。 示例: 点击 这里 。 无序列表 使用 *,+,...

C 语言回顾 - 高级特性

接着上一篇C 语言回顾 - 基本特性, 本文继续介绍 C 语言中的一些高级特性。 指针 指针可以说是 C 语言中最让人迷惑也是最迷人的特性了。 指针变量 现代计算机将内存分为字节(byte),每个字节存储8位(bit)信息。每个字节都有其唯一的地址,程序中的每个变量占有一个或多个字节的内存,把第一个字节的地址称为变量地址。 指针变量被用来存储地址信息,例如:用指针变量 p 存储变量 i ...

C 语言回顾 - 基本特性

作为第一门接触的语言,C 语言在工作以后相对接触的就比较少。随着工作研究的不断深入,接触到的底层知识逐渐增多, 最近花时间重温了一下《C程序设计语言: 现代方法》这本书,对 C 语言相关知识做一个复习,在此也做一些整理。 Hello World 创建 hello.c 文件 #include <stdio.h> int main() { printf("Hello wor...

设计模式 - 状态模式(State pattern)

定义 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 类型 对象行为模式 适用性 以下情况适用状态模式: 一个对象的状态取决于它的行为,并且它必须在运行时刻根据状态改变它的行为; 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态,这些状态通常由一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条...