AlstonWilliams's Blog

Thinking will not overcome fear but action will.

深入理解Java虚拟机总结-虚拟机字节码执行引擎

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. 另外,需要注意的是,读此文前,各位应当对Java字节码文件格式以及字节码指令有一个清楚的认识. 运行时栈帧结构 在介绍Java内存布局时,我们就提到过,每个方法在执行时,都会在虚拟机栈中创建一个栈帧,其中包括局部变量表,操作数栈,动态链接,返回地址等. 那么这几个区域到底都...

深入理解Java虚拟机总结-编译期优化

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. 在这篇文章中,我们会简单介绍一下Java的编译过程,以及在编译过程中进行的优化. 编译过程 编译过程大致分为下面的三个过程,分别是: 解析与填充符号表过程 插入式注解处理器的注解处理过程 分析与字节码生成关系 它们之间的关系如下图所示: 解析和填充符...

深入理解Java虚拟机总结-线程安全与锁优化

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. 什么是线程安全 «Java Concurrency In Practice»的作者Brian Goetz说,"当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得...

深入理解Java虚拟机总结-对象的创建过程

今天同学问我下面的代码,输出结果为什么会是那样.查阅资料之后,终于给了她答案,我也对Java中对象的创建过程有了更深的理解. 有两个问题: 为什么调用Parent的构造器时,里面调用的printName()方法却是Child的? 为什么调用Parent的构造器时,printName()方法输出的是null? 我们先介绍一下对象的创建过程: 查看对应的类是否被...

深入理解Java虚拟机总结-垃圾回收和内存分配策略

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. 判断对象是否存活的算法 (1)引用计数算法: 每当一个地方引用一个对象时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为0的对象就是不可能再被使用的对象. (2)可达性分析算法: 从”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的...

深入理解Java虚拟机总结-Java对象在内存中的分布

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. Java运行时数据区 Java运行时数据区分为下面的几块区域: 程序计数器:线程独立的一块区域,保存了下一条指令的地址. 虚拟机栈: 虚拟机栈也是线程独立的一块区域,它内部包含很多个栈帧,其中每个栈帧都是由方法在运行时创建的.每个栈帧都包括了局部变量表,操作数栈,动...

深入理解Java虚拟机总结-Java内存模型与线程

注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息. 在介绍Java内存之前,我们先考虑一下硬件上的结构. 我们都知道,一台机器有几个必要的组件,CPU,内存,高速缓存,磁盘.高速缓存就是为了解决CPU在进行运算的时候,由于需要经常和内存交互并且内存的速度和CPU的速度差距很大而引入的一个速度尽可能接近CPU运算速度的缓存. 那...

数据库一定是你的系统的瓶颈吗-

这几年来,我特别喜欢看关于性能优化的文章.基本上是每看到一篇,都会去看.然而,我发现这些文章大多是倾向于数据库层面的优化,系统硬件层面的优化. 这本身无可厚非,因为写那些文章的,大多数都是大厂的工程师,因为会有Code Review,代码的质量都会有所保证. 但是,对于我们学生来说,调优的时候,关注数据库等方面的调优,就一定有效吗?换句话说,就是,数据库等,一定是你的系统的瓶颈吗? 比...

操作系统IO模型(译)

在学习NIO之前,我们非常有必要了解一下操作系统中的各种IO模型,否则是不会理解NIO的实现的. 这篇文章是我翻译I/O Multiplexing: The select and poll Functions这篇文章中的前半部分关于IO模型的部分.这篇文章中,还对select()等系统调用有更加深入的介绍,各位不妨读一下. 正文 在Unix下,我们有五种不同的IO模型,分别是: ...

搭建HTTP-HTTPS代理服务器来翻墙

这一段时间,打算尝试一下Kubernetes和Mesos,因为Docker自带的Swarm集群功能有限.然而,各位都知道,在我们大中华,很多国外的内容都是被封锁的.比如,Kubernetes的Docker镜像是在Google Cloud Platform上的.这就比较尴尬了. 在物理机上,我们通过ShadowSocks代理,下载镜像,倒也可以.然而,在开发环境下,我们需要用到Minikub...