自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(16)
  • 收藏
  • 关注

转载 JVM(十三):后端编译优化

JVM(十三):后端编译优化 在 JVM(一):源文件的转变 中我们介绍了 Java 中的前端优化,即将 Java 源代码转换为字节码文件。在本文中,我们将介绍字节码文件如何转换为本地机器码,并如何对代码进行优化,以提高性能。因为不同的虚拟机,字节码优化引擎不同,因此本文采用 JIT 来作为例子,其也是 HotSpot 中的默认编译器。 架构 我们都知道将代码转换为机器码有两种方式,...

2019-08-29 20:18:00 152

转载 JVM(十二):方法调用

JVM(十二):方法调用 在 JVM(七):JVM内存结构 中,我们说到了方法执行在何种内存结构上执行:Java 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们来看一下 方法是如何调用的。 方法调用 首先,我们要明白一个基础性概念:方法调用并不是方法执行。其只是确定该调用哪一个方法而已(多态的影响,选择方法的不同版本)。并且因为 Java 调用...

2019-08-24 16:25:00 113

转载 JVM(十一):内存分配

JVM(十一):内存分配 在前面的章节中,我们花了大量的篇幅去介绍 JVM 内的内存布局、对象在内存中的状态、垃圾回收的算法和具体实现等。今天让我们探讨一下对象是如何分配内存的。 堆内存划分 前面说过,从内存回收的角度来看,堆被分为以下几个部分: 开始创建的对象大多都会直接分配到新生代一块区域中,只有大对象和经过多次 GC 后依然存活的对象会放置在老年代中。 那么一个对象在被创...

2019-08-20 20:41:00 133

转载 垃圾收集器

JVM(十):垃圾收集器 在上文中,我们对不同的算法实现进行了分析。在本文中,我们就对其算法的具体实现——垃圾收集器进行分析对比。 总览 垃圾收集器依赖于具体的虚拟机实现。在本文中,我们采取的是 HotSpot,其内置了 7种类型的垃圾收集器实现。下面就让我们逐个进行学习,分析。 Serial Serial,最基本最老的收集器。其存在的主要问题是"Stop The World",即...

2019-07-30 20:05:00 91

转载 JVM(九):垃圾回收算法

JVM(九):垃圾回收算法 在本文中,我们将从概念模型的角度探讨 JVM 是如何回收对象,包括 JVM 是如何判断一个对象已经死亡,什么时候在哪里进行了垃圾回收,垃圾回收有几种核心算法,每个算法优劣是什么等。 为何需要GC Java 中的一个核心技术就是自动垃圾回收,该技术使得程序员可以不用像写 C++ 一样手动分配和释放内存,那么为何还需要我们去学习垃圾回收呢。这里就要说到两个概念...

2019-07-19 14:04:00 118

转载 JVM(八):Java 对象模型

JVM(八):Java 对象模型 本文将学习对象是如何创建的,对象的内存布局,以及如何定位访问一个对象。 对象创建 当虚拟机碰到一个new指令时,首先检查指令参数能否在常量池中定位一个类的符号引用,并且检查该符号引用对应的类是否已经被加载,解析和初始化。当一切都确定完成后,JVM就会为其分配内存(需要分配的内存大小在现在就已经确定,在 下面 中详细讲述)。 对象的内存分配方式分为以下...

2019-07-16 08:40:00 174

转载 JVM(七):JVM内存结构

JVM(七):JVM内存结构 在前几节的文章我们多次讲到 Class 对象需要分配入 JVM 内存,并在 JVM 内存中执行 Java 代码,完成对象内存的分配、执行、回收等操作,因此,如今让我们来走入 JVM,看看 JVM 中的内存结构是如何构造的,下面就让我们一探究竟吧。 内存划分 在本小节中,我们以《Java 虚拟机规范》中的要求,并以当前主流虚拟机 Hotspot VM 为例...

2019-07-02 10:55:00 127

转载 JVM(六):探究类加载过程-下

JVM(六):探究类加载过程-下 上文说了类加载过程的5个阶段,着重介绍了各个阶段做的工作。在本文中,我们对执行加载阶段的主体进行探讨,学习类加载器的模型和逻辑,以及我们该如何自定义一个类加载器。 定义 前面说过加载阶段是一个可以让设计人员高度自控的模块,因为类文件的源头可以是多种多样的,代码生成、反射生成或从网络中生成等。因此类加载器作为对这些文件的处理就显得尤为重要。 但类加载器...

2019-06-28 09:29:00 115

转载 JVM(五):探究类加载过程-上

JVM(五):探究类加载过程-上 本文我们来研究一个Java字节码文件(Class文件)是如何加载入内存中的,在這個过程中涉及类加载过程中的加载,验证,准备,解析(连接),初始化,使用,销毁过程,并探讨实行这些过程的类加载器,以及其加载的逻辑。 概述 Java拥有动态加载类和动态连接的特性,因此其加载过程并不像其他语言在编译时就已经完成,它是动态进行的,即在程序运行过程中动态加载入内...

2019-06-15 11:33:00 81

转载 JVM(四):深入分析Java字节码-下

JVM(四):深入分析Java字节码-下 在上文中,我们讲解了 Class 文件中的文件标识,常量池等内容。在本文中,我们就详细说一下剩下的指令集内容,阐述其分别代表了什么含义,以及 JVM 团队这样设计的意义。 简介 JVM 指令设计为仅有一个字节长度,由操作码和紧随其后的零至多个操作数来构成。 这里说到 JVM 的指令仅有一个字节,这意味着 JVM 在操作超过一个字节长度的数据...

2019-06-11 23:23:00 68

转载 JVM(三):深入分析Java字节码-上

JVM(三):深入分析Java字节码-上 字节码文章分为上下两篇,上篇也就是本文主要讲述class文件存在的意义,以及其带来的益处。并分析其内在构成之一 ———字节码,而下篇则从指令集方面着手,讲解指令集都有哪些,以及其各自代表的含义。最后总结一下Class文件存在的必然性。 意义 前面说过 Java 虚拟机拥有平台无关性,但其实现在语言无关性在 JVM 和更加的体现了出来。表现就是...

2019-06-01 09:03:00 138

转载 JVM(二):Java中的语法糖

JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑。 语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语...

2019-05-30 00:13:00 129

转载 JVM(一):源文件的转变

JVM(一):源文件的转变 本文讲述一个.java源文件是如何经过javac编译器的一系列操作变为.class文件的. 编译 说到编译,大家都能想到是编译器经过一系列方法将源代码转变为目标机器代码,但Java作为一个平台无关性语言,前端编译的主要作用是将源代码转变为JVM能识别出的语言,而具体与机器相关的机器代码生成由后续JVM自己掌控. Java中的编译分为前端编译和后端编译两种...

2019-05-21 22:49:00 138

转载 JVM(零):走入JVM

JVM(零):走入JVM 本系列主要讲述JVM相关知识,作为本系列的第一篇文章,本文从Java为什么是一个跨平台的语音开始介绍,逐步引入Java虚拟机的概念,并给出一个JVM相关知识图谱,可以让读者从一个高屋建瓴的角度明白JVM的强大和实用. 为什么Java是跨平台的语言 提到Java,就不得不提到Java的跨平台特性,也就是所谓的"一次编写,处处运行",其不像C/C++这种语言,它...

2019-05-21 00:06:00 82

转载 Java面试题解析(一)

本文是面试题目系列的第一篇,题目主要来自 GitChat 上一个课程,在此特别记录自身想的答案和在网上查询的结果,分享出来,大家共同学习。如果有不对的地方,欢迎大家指出。 Java基础 JDK 和 JRE有什么区别 JDK:Java Development Kit,java开发包,其包括JRE和一些Java工具,如javac,javap等 开发环境(编译,调试,分析工具)和运行环...

2019-04-17 00:01:00 108

转载 Java :面向对象

Java :面向对象 直面Java 第001期 什么是面向过程 面向过程是以函数为中心,要解决一个问题,需要把问题分解为一个个的步骤,然后定义一系列的流程,用特定的输入经过函数的处理,最终输出特定的结果。 什么是面向对象 面向对象是对象为中心,对每一个步骤抽象形成对象,在对象中封装好需要解决问题的方法,强调了代码的复用。 两者的区分 比如说现在要实现一个开车的功能。 对于面向过程来说...

2018-12-09 03:04:00 86

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除