- 博客(7)
- 收藏
- 关注
原创 MIDI二进制文件格式简析
MIDI二进制文件格式简析本文主要参考自Official MIDI SpecificationsChunks每个MIDI文件由一系列chunk组成,每个chunk的前四个字节为魔数(magic number),是由四个ASCII字符所组成的类型标识。目前标准格式中已定义的chunk类型只有header和track两种,其魔数分别为"MThd"和"MTrk",对于类型未被定义的chunk则应该被忽略。每个chunk在其四字符类型之后紧跟一个32位无符号整数,意味这一chunk后续将要读入的字节个数,每
2021-04-13 00:51:57
621
原创 深入JDK源码探索Java语言Lambda具体实现
当我刚刚开始学习Java的Lambda的时候,我曾经完全误解了它的实现方式,并且前段时间发现居然有些朋友和当时的我一样。比如下面这个例子:class Foobar { Runnable foobar() { return () -> {}; }}在最初的时候,我猜想它也许会像这样实现:class Foobar { Runnable foobar() { return new Runnable() { @Over
2021-03-26 22:14:06
292
2
原创 探索Java中隐藏的访问权限synthetic
探索Java中隐藏的访问权限synthetic首先参考一下 Java8 虚拟机规范中对The Synthetic Attribute的相关描述:A class member that does not appear in the source code must be marked using a Synthetic attribute, or else it must have its ACC_SYNTHETIC flag set. The only exceptions to this requi
2020-09-18 14:11:41
325
原创 深入JVM字节码探索assert关键字
深入JVM字节码探索assert关键字引言如果熟悉 C 语言,那么也许会使用过assert.h中的assert函数,在 Java 中的assert关键字也能够提供运行时断言这一功能,不过不同之处在于,Java 的断言可以在运行中决定是否开启,因此不必重新编译字节码。本文主要对assert这个关键字在 JVM 字节码层面的实现原理进行分析,讨论其运行时配置断言启用与禁用的方式。目录assert关键字基础assert实现原理分析assert运行时配置启用与禁用1. assert关键字基础c
2020-09-12 14:46:37
229
原创 深入JVM字节码探索switch枚举
深入JVM字节码探索switch枚举本文主要讨论对枚举switch的实现原理。以下代码作为示例:enum Foobar { FOO, BAR;}class Test { static int test(Foobar var0) { switch (var0) { case FOO: return 1; case BAR: return 2;
2020-09-09 20:42:34
332
原创 深入JVM字节码探索switch字符串
深入JVM字节码探索switch字符串本文主要讨论对字符串switch的实现原理。以下代码作为示例:class Test { static int test(String var0) { switch (var0) { case "foo": return 0; case "bar": return 1; case "10":
2020-09-09 14:19:07
241
原创 深入JVM字节码探索switch指令
深入JVM字节码探索switch指令引言从 C 到 C++ 到 Java 到一系列各种各样的语言,大多都支持多路分支语句,比如 Kotlin 的when和 Rust 的match等等,在 Java SE 14 版本的语言规范也添加了对switch表达式的支持。本文主要对 Java SE 8 版本中的switch语句从字节码层面进行研究,理解switch语句相关的各种细节,并尝试着对其编译产物人工地进行反编译,探索字符串switch与枚举switch的具体实现方式。目录switch关键字基础sw
2020-09-09 00:10:44
676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人