马赛琦的博客

认识你自己 凡事勿过度

Scroll Down

生活就像傻子讲故事,充满着《喧哗与骚动》

1. 第一本福克纳接触到福克纳其实是豆瓣有一期纪念福克纳的活动,我点进去后发现有本叫做《喧哗与骚动》的书,我很喜欢这个书名,又因为这是49年诺奖作品,有了读这本书的计划。《喧哗与骚动》是我的第一本福克纳,工作之余大概花了一个月时间才看完,倒不是篇幅很长,而是福克纳的“意识流”的写作法让我一开始表现出

《深入理解Java虚拟机》第三版 - 09 - Java线程与协程

Java线程与协程1. 线程的实现方式1.1. 内核线程实现使用内核线程实现的方式也被称为1:1实现。内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行

《深入理解Java虚拟机》第三版 - 08 - 程序编译与代码优化

1. 编译器分类前端编译器:.java文件转变为.class文件的过程(比如Javac)后端编译器:即时编译器(JIT编译器,Just In Time Compiler):运行期把字节码转变成本地机器码的过程(比如HotSpot的C1、C2编译器,Graal编译器)提前编译器:把程序编译成与目标机器

《深入理解Java虚拟机》第三版 - 07 - 虚拟机字节码执行引擎

1. 运行时栈帧结构Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧包括了局部变量表、操作数栈、动态连接、方法返回地址和

《深入理解Java虚拟机》第三版 - 06 - 类加载机制

1. 类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading

《深入理解Java虚拟机》第三版 - 05 - 字节码指令

1. 字节码指令1.1. 指令构成 & 特点Java虚拟机的指令构成:操作码,Opcode:一个字节长度的、代表着某种特定操作含义的数字操作数,Operand:跟随其后的零至多个代表此操作所需的参数特点:Java虚拟机操作码长度限制为一个字节(0~255)指令集操作码总数不能超过256条Cl

《深入理解Java虚拟机》第三版 - 04 - 类文件结构

类文件结构1. 类文件结构1.1. Class文件结构Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8个字节以上空间的数据项时,则

《深入理解Java虚拟机》第三版 - 02 - 垃圾收集器与内存分配策略

1. 如何判断对象可被GC(Garbage Collection)1.1. 引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。这就是引用计数算法。但是,在Java领域,至少主流的Java虚拟机里

《深入理解Java虚拟机》第三版 - 01 - Java内存区域与内存溢出异常

1. JVM运行时数据区根据《Java虚拟机规范》:1.1. 程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的