JVM系列第5讲:字节码文件结构

温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看。 前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件。但其实字节码是有一套规范的,而规定字节码格式的就是《Java 虚拟机规范》。 《Java 虚拟机规范 ... »

JVM系列第4讲:从源代码到机器码,发生了什么?

在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外。那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的。 如下图所示,编译器可以分为: 前端编译器、JIT 编译器和AOT编译器 。下面我们逐个讲解。 前端编译器:源代码到字节码 ... »

JVM系列第3讲:到底什么是虚拟机?

我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。 为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的。 ... »

JVM系列第2讲:Java 虚拟机的历史

说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待。但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRocketit、IBM J9 等等。今天我们就来简单回顾下 Java 虚拟机的发展历史。 虚拟机始祖:Su ... »

JVM系列第1讲:Java 语言的前世今生

Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大。虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统。大到国际电商巨头阿里巴巴,小到无名小公司,我们均可看到 Java 的身影。 我是 2010 年开始接触 Java 语言 ... »

JVM系列开篇:为什么要学虚拟机?

跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看。所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试。但我经过了几年的学习和实战,我发现其实学习虚拟机并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。 先聊聊我的 ... »

如何唯一确定一个 Java 类?

今天偶然想起之前和朋友讨论过的一个问题:如何唯一确定一个 Java 类?我相信大多数朋友遇到这个问题的回答都是:类的全路径呗。但事实上,唯一确定一个 Java 类,单单靠类路径是不够的,还要多加上一个东西:类加载器。也就是说, 类加载器 + 类路径才唯一确定一个 Java 类。 为了证明我所说的,我 ... »

不读大学也能成功,七个读大学的备用选择

随着毕业季的来临,我收到许多年轻读者的询问,他们问我是否应该上大学或者读研究生。 答案是? 要看情况。 尽管读大学或研究生能够增加你的竞争力,但它们并不适合所有人。 尽管主流社会告诉你,如果你想要经营成功企业、实现财务自由,那么上大学、上MBA是必须的。但在很多情况下,从财务、时间和经验这几个方面评 ... »

策略模式与SPI机制,到底有什么不同?

这里说的策略模式是一种设计模式,经常用于有多种分支情况的程序设计中。例如我们去掉水果皮,一般来说对于不同的水果,会有不同的拨皮方式。此时用程序语言来表示是这样的: 如上面代码所写,我们用条件语句块去判断不同类型的水果,之后采取不同的剥皮方法。但这种方式在程序设计领域会导致原来的代码被修改,即每次我们 ... »

【超实用】面对枯燥的源码,如何才能坚持看下去?

一个软件开发人员,工作到了一定的年限(一般是3、4年左右),如果他还没学会阅读源码,那么他就会遇到瓶颈。因为到了这个时候的开发,他应该不仅仅只会做那些 CURD 的业务逻辑,而应该会根据公司的实际情况去写框架。而基本上没有谁能像天才一样从零写出一个框架,很多人写框架其实都是从模仿开始的。而你要模仿, ... »

从字节码层面,解析 Java 布尔型的实现原理

最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题: 布尔型在虚拟机中到底是什么类型? 要想解答这个问题,我们看 JDK 的源码是无法解决源码的,我们必须深入到 class 文件中才能解决问题。于是他给出了这么一道题: 这道题很简单,结果是输出: 但我们要深入到 class ... »

你没钱,真的不是因为不努力

前段时间我聊了关于技术与思维的看法,提出了思维比技术更加重要的看法。从后台数据来看,大家都对这个话题非常感兴趣,并且有朋友意味未尽,想更加深入地了解这个话题。 之后我写了一篇推文,分享了一本书《请停止无效努力:如何用正确的方法快速进阶》。这本书就是讲学习的方法,以及学习的几个层次,其中就说到了对技术 ... »

极简入门:什么是智能合约?

「智能合约」一词是由Nick Szabo在1997年首次提出的,比比特币的出现要早很多。他是位计算机科学家、法学学者,还是个密码译解专家,所以我还是替他跟你「讲人话」好了。 简而言之:他想用分布式记账技术来保存合同。如今的智能合同,就如现实世界中的合同一样。唯一的区别只不过是它们完全是数码形态的。事 ... »

我是SPI,我让框架更加优雅了!

文章首发于 "【陈树义的博客】" ,点击跳转到原文 "《我是 SPI,我让框架更加优雅了!》" 自从上次小黑进入公司的架构组之后,小黑就承担起整个公司底层框架的开发工作。就在刚刚,小黑又接到一个任务:做一个通用的歌曲信息解析框架。即输入歌曲数据,之后返回该歌曲的名称、作者、时长等时间。 接到项目的小 ... »

如何快速学好Shell脚本?

Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值。但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言的语法却是一件非常困难的事情。甚至有人吐槽,或许没有谁能清楚地说明白 Shell 的语法。 例如下面这两个 Shell 脚本: 这两个脚本的区别只是 if 中的 ... »

我所经历的创业潮

文章首发于 "【博客园 陈树义】" ,点击跳转到原文 "《我所经历的创业潮》" 站在风口上,猪都会飞起来。 —— 雷军 这句话虽然夸张,但却从侧面反映出机遇对于创业的重要性。我虽工作四年,但却经历过好几次创业浪潮,包括淘宝开店、O2O外卖、轻健身等。 始于2008年的淘宝生意 那时候的我还是一个高中 ... »

注解的那些事儿(二)| 如何自定义注解

自定义注解是自己写框架的必备技能,使用注解能极大地提升开发效率,因此自定义注解是一个高级开发者必备的技能。 要自定义注解,首先需要了解一个注解的构成部分。 一个注解大致可以分为三个部分: 注解体、元注解、注解属性 。 在在这三个主要组成部分中,注解体指定了注解的名字,而元注解则标记了该注解的使用场景 ... »

注解的那些事(一)| 为什么要使用注解?

注解是 JDK 1.5 引入的功能,相信不少开发者都使用过这个功能,但关于为什么要使用注解,你了解过多少呢? 在 JDK 1.5 之前,Java 还没引入注解,这个时候如果我们要在 Spring 中声明一个 Bean,我们只能通过 XML 配置的方式。 但当有了注解,我们就可以不必写一个 XML 配 ... »