虚拟机

C++的动态分派在HotSpot VM中的重要应用

众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C++ 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于多态的支持对于单继承的实现非常类似。 首先来体现一下C++的动态分派,如下: class Base1{ pub ... »

mazhimazhi

C++指针和地址偏移在HotSpot VM中的应用

在前面我们介绍过new运算符,这个操作实际上上包含了如下3个步骤: 调用operator new的标准库函数。此函数会分配一块内存空间以便函存储相应类型的实例; 调用相应类的构造函数; 返回一个指向该对象的指针。 在第一步中,其实我们可以自己写个operator new函数对标准库函数进行重载,通常 ... »

mazhimazhi C/C++

C++ 重载运算符在HotSpot VM中的应用

C++支持运算符重载,对于Java开发者来说,这个可能比较陌生一些,因为Java不支持运算符重载。运算符重载本质上来说就是函数重载。下面介绍一下HotSpot VM中的运算符重载。 1、内存分配与释放 在C++中可以通过new运算符创建一个C++的类实例,这个操作实际上上包含了如下3个步骤: 调用o ... »

mazhimazhi

Linux虚拟机安装及下载

centos 7操作系统下载及安装步骤 (仅供参考) 下载: 1.打开如下网站:先下载镜像文件 ping:https://www.centos.org/download/ 2.进入到如下界面 3.然后到如下界面 4.点击下载 5.等待下载完成即可 安装:这里要用到VMware软件,没有安装的话网址如 ... »

安装CentOS7虚拟机

1、前期工作 下载CentOS7镜像:CentOS-7-x86_64-DVD-2009.iso 安装虚拟机工具:VirtualBox 2、新建虚拟机 2.1、设置新建虚拟机的名称、安装路径、类型及版本 注意:CentOS Linux 的发行版本是通过编译 Red Hat, Inc 公开提供的 Red ... »

《深入理解Java虚拟机》读书笔记:基于栈的字节码解释执行引擎

虚拟机是如何调用方法的内容已经讲解完毕,从本节开始,我们来探讨虚拟机是如何执行方法中的字节码指令的。上文中提到过,许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,在本章中,我们先来探讨一下在解释执行时,虚拟机执行 ... »

fhey

《深入理解Java虚拟机》读书笔记:方法调用

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,但前面已经讲过,Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号 ... »

fhey

《深入理解Java虚拟机》读书笔记: 类加载器

类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是 ... »

fhey

《深入理解Java虚拟机》读书笔记:字节码指令简介

字节码指令简介 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构(这两种架构的区别和影响将在第8章中探讨),所以大多数的指 ... »

fhey

《深入理解Java虚拟机》读书笔记:Class类文件的结构

Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的的程序存储格式——字节码(ByteCode),从而实现了程序的“一次编写,到处运行”。“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号... ... »

fhey

《深入理解Java虚拟机》读书笔记:垃圾收集器

垃圾收集器 HotSpot虚拟机包含的所有收集器如图3-5所示。图3-5展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。 新生代收集器:Serial、ParNew、Parallel Scavenge,新生代收集器均采用复制算法 老年代收集器:Serial Old ... »

fhey

《深入理解Java虚拟机》读书笔记:垃圾收集算法

由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程。 垃圾收集算法概要 1、 标记-清除算法 标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,算法分为“标记”和“清 ... »

fhey

《深入理解Java虚拟机》读书笔记:判断对象是否存活

本节内容的概要如下; 对象已死吗? 一、判断对象是否存活的算法 1、引用计数器算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 客观地说,引用计数算法(Reference Counting)的实现简 ... »

fhey

《深入理解Java虚拟机》读书笔记:HotSpot虚拟机对象探秘

选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。因此,在使用Serial、ParNew等带Compact过程的收集器时,系统采用的分配算法是指针碰撞,而使用CMS这种基于Mark-Sweep算法的收集器时,通常采用空闲列表。这两种对象访问... ... »

fhey