
overview
文章平均质量分 92
Single_YAM
九和诸侯,一匡天下
展开
-
漫谈计算机编码
我们知道,在计算机内部,所有的信息都是以二进制形式进行存储。无论是字符,或是视频音频文件,最终都会对应到一串由 0 和 1 构成的数字串。所以从我们能看懂的人类信息转变为机器级别的二进制语言的过程就可以理解为一种编码的过程,自然,相反的过程就是所谓的解码的过程。可以这么说,所有的乱码都是源于解码方式与编码方式的不一致。就好像我用英文给你写了一封信(我要表达的信息用英文这种方式 [编码] 了),...原创 2018-03-09 15:04:04 · 567 阅读 · 0 评论 -
字节码文件的内部结构之谜
如果计算机的 CPU 只有「x86」这一种,或者操作系统只有 Windows 这一类,那么或许 Java 就不会诞生。Java 诞生之初就曾宣扬过它的初衷,「一次编写,多处运行」,而它之所以能够实现跨平台的一个核心点就在于,Java 引入「字节码」屏蔽了与底层操作系统之间的差异。同一段 Java 程序在编译后生成的字节码文件是唯一的,不会因为平台的不同而产生任何的变化。而同一段字节码跑在不同实...原创 2018-03-17 11:11:05 · 1343 阅读 · 0 评论 -
弄懂 JRE、JDK、JVM 之间的区别与联系
其实很多 Java 程序员在写了很多代码后,你问他 jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人不知所云。本篇不会讲述 jvm 底层是如何与不同的系统进行交互的,而主要理清楚三者之间的区别,搞清楚我们写的 xxx.java 文件是被谁编译,又被谁执行,为什么能够跨平台运行。首先,我们分别对这三者进行阐述。JVM :英文名称(Java Virtual Machine),就...原创 2018-03-05 11:39:28 · 70141 阅读 · 6 评论 -
数值信息的机器级存储
计算机中使用八位的块,或者说是「字节」,作为最小的寻址单元。你可以将整个存储器视作一个超大的「字节数组」,每个字节都有一个唯一的数字编号,这个编号就是所谓的地址,通过这个地址,我们可以唯一的确定一块数据。但是我们代码中定义的各种数值又是如何转换为二进制串存储在这些「字节」里面的呢?为什么两个整数相加之后的结果会变成负数?等等这些类似问题,其实都归咎于 计算机中是如何存储各种类型的数值的。只有理...原创 2018-03-14 10:59:20 · 295 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机把字节码文件从磁盘加载进内存的这个过程,我们可以粗糙的称之为「类加载」,因为「类加载」不仅仅是读取一段字节码文件那么简单,虚拟机还要进行必要的「验证」、「初始化」等操作,下文将一一叙述。类加载的基本流程一个类从被加载进内存,到卸载出内存,完整的生命周期包括:加载,验证,准备,解析,初始化,使用,卸载。如图:这七个阶段按序开始,但不意味着一个阶段结束另一个阶段才能开始。也就...原创 2018-03-21 17:22:13 · 245 阅读 · 0 评论 -
关于类的对象创建与初始化
今天,我们就来解决一个问题,一个类实例究竟要经过多少个步骤才能被创建出来,也就是下面这行代码的背后,JVM 做了哪些事情? Object obj = new Object();当虚拟机接受到一条 new 指令时,首先会拿指令后的参数,也就是我们类的符号引用,于方法区中进行检查,看是否该类已经被加载,如果没有则需要先进行该类的加载操作。一旦该类已经被加载,那么虚拟机会根据类型信息在...原创 2018-04-10 16:17:50 · 2553 阅读 · 0 评论 -
访问权限控制
访问权限控制又称「隐藏具体实现」,也就是说,我们可以通过它来决定某个类或者类中的成员在程序中的可见范围。例如,被修饰为 public 的元素在全局范围可见,而被修饰为 private 的元素只能可见于类的内部。Java 的访问权限控制提供了四种不同的访问权限限定词,用于描述元素在程序中的可见范围。下面我们具体来看一看:包的概念Java 中最基本的文件单位就是类,每个类文件的文件名不...原创 2018-04-11 15:06:28 · 618 阅读 · 0 评论 -
垃圾收集机制与内存分配策略
Java 语言与其他编程语言有一个非常突出的特点,自动化内存管理机制。而这种机制离不开高效率的垃圾收集器(Garbage Collection)与合理的内存分配策略,这也是本篇文章将要描述的两个核心点。引一句周志明老师对 Java 中的内存管理机制的描述: Java 与 C++ 之间有一堵有内存动态分配和垃圾收集技术所围成的「高墙」,墙外面的人想进去,墙里面的人却想出来。各有各的...原创 2018-04-04 10:28:37 · 443 阅读 · 0 评论 -
虚拟机字节码执行引擎
所谓的「虚拟机字节码执行引擎」其实就是 JVM 根据 Class 文件中给出的字节码指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节码指令,输出运行结果的一个过程。接下来我们详细看看这部分内容。方法调用的本质在描述「字节码执行引擎」之前,我们先从汇编层面看看基于栈帧的方法调用是怎样的。(以 IA32 型 CPU 指令集为例)IA32 的程序中使用栈帧数据结构来...原创 2018-03-29 15:34:50 · 251 阅读 · 0 评论