之前已经介绍了在Ubuntu 16.04上编译OpenJDK8的源代码调试HotSpot源代码。这一章将介绍HotSpot项目的目录结构。

HotSpot目录下主要由agent、make、src和test这4个子目录构成。其中agent目录下包含了Serviceability Agent的客户端实现;make目录下包含了用于编译HotSpot的各种配置文件;src目录是最重要的一个目录,本书讲解的所有源代码都包含在这个目录下;test目录下包含HotSpot相关的一些单元测试用例。

src目录的结构如下图所示。

src目录下包含了HotSpot项目的主体源代码,主要由cpu、os、os_cpu与share这4个子目录构成。下面简单介绍一下这4个子目录,如下:

  • cpu目录:此目录下包含一些依赖具体处理器架构的代码,现在主流的处理器架构主要有sparc、x86和zero,其中x86又最为常见,笔者的电脑cpu也是x86架构,所以在在涉及到相关源代码实现时,只会讲解x86目录下的源代码实现。

  • os目录:此目录下包含一些依赖操作系统的代码,主要的操作系统有基于linux内核的操作系统、基于unix的操作系统(posix)、windows和solaris。笔者的电脑是基于linux内核的Ubuntu操作系统,所以在涉及到相关源代码实现时,只会讲解linux目录下的源代码实现。

  • os_cpu目录:此目录下包含一些依赖操作系统和处理器架构的代码,如linux_x86目录。linux_x86目录下包含的就是基于linux内核的操作系统和x86处理器架构相关的代码,也是笔者本书要讲解的源代码实现。

  • share目录:此目录下包含了独立于操作系统和处理器架构的代码,尤其是vm子目录,这个子目录中包含的内容比较多,HotSpot主要的一些功能模块都包含在这个子目录下。下表介绍了vm目录下一些重要子目录的功能。

目录

描述

adlc

平台描述文件

asm

汇编器

c1

C1编译器,即client编译器

ci

动态编译器

classfile

Class文件解析和类的链接等

code

机器码生成

compiler

调用动态编译器的接口

Opto

C2编译器,即server编译器

gc_interface

GC接口

gc_implementation

垃圾收集器的具体实现

interpreter

解释器

libadt

抽象数据结构

memory

内存管理

oops

JVM内部对象表示

prims

HotSpot对外接口

runtime

运行时

services

JMX接口

utilizes

内部工具类和公共函数

关注个人博客www.classloading.com或公众号,有HotSpot源码剖析系列文章!

HotSpot项目结构的更多相关文章

  1. 认识ASP.NET 5项目结构和项目文件xproj

    ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...

  2. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  3. Android之什么是Activity和常用的ADB命令以及Android项目结构的认识

    总结一下之前学习Android的一些内容 一:  Android常用的ADB命令(adb android调试桥)      1.adb devices   查看模拟器设备并重新连接. 2.adb ki ...

  4. Go项目结构和模块导入

    Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...

  5. android第一行代码-1.项目结构

    0.项目结构 一个简单的android项目结构大致如下 入口就是MainActivity这个类,如果对于一个陌生的项目,最好的办法是看AndroidMainifest.xml,如下 <?xml ...

  6. Mybatis 复习 Mybatis 配置 Mybatis项目结构

    pom.xml文件已经贴在了文末.该项目不使用mybatis的mybatis-generator-core,而是手写Entities类,DaoImpl类,CoreMapper类 其中,Entities ...

  7. django开发个人简易Blog——构建项目结构

    开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. a ...

  8. 架构系列:ASP.NET 项目结构搭建

    我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都简单的单项目 (2)为 ...

  9. Android项目结构 以及体系结构

    学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src  主要是 源 ...

随机推荐

  1. Java中BigDecimal类的常用方法

    1.简介 BigDecimal类位于java.math.BigDecimal包下.使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用. 对于不需要任何准确计算精 ...

  2. java类加载器是什么?

    类加载器是有了解吗? 解析:底层原理的考察,其中涉及到类加载器的概念,功能以及一些底层的实现. 答:顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说 ...

  3. java实现第六届蓝桥杯密文搜索

    密文搜索 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...

  4. Linux 用户管理命令-useradd

    useradd [选项] 用户名,用来添加用户,实质是创建了几个用户信息的相关文件,选项可以支持手动创建 常见选项 -u UID:手动指定用户的UID -d 家目录 -c 用户说明 -g 组名:指定用 ...

  5. 【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&指定扫描规则

    写在前面 在实际项目中,我们更多的是使用Spring的包扫描功能对项目中的包进行扫描,凡是在指定的包或子包中的类上标注了@Repository.@Service.@Controller.@Compon ...

  6. STL sort的comp函数注意事项

    今天写了个题,结果碰巧re了,我眉头一皱发现事情并不简单. 原来我之前的comp写的都是错的. bool cmp(milkman a,milkman b) { return a.price<=b ...

  7. 【01JMeter基础】测试计划

    测试计划 整个脚本的集合根目录,所有线程组集合的承载,可以添加线程组.测试片段.非测试元件.配置元件.监听器.定时器.前置/后置处理起器.断言等 一.用户自定义变量 可以使用在所有的线程组中,通过${ ...

  8. Docker数据管理与挂载管理

    介绍如何在 Docker 内部以及容器之间管理数据:在容器中管理数据主要有两种方式:数据卷(Volumes).挂载主机目录 (Bind mounts) 镜像来源 [root@docker01 ~]# ...

  9. 单元测试中使用mock最好不要使用easymock而应该使用powermock

    视频参考汪文君powermock视频教程相当的经典

  10. laravel --- composer install之后,项目没有vender目录

    composer install之后,项目没有vender目录 1. 原因一:PHP版本过低 PHP版本需要7.1以上,目前使用的是7.0.23