1.HotSpot的源码目录结构

├─agent                            Serviceability Agent的客户端实现

├─make                             用来build出HotSpot的各种配置文件

├─src                              HotSpot VM的源代码

│  ├─cpu                            CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现)

│  ├─os                             操作系相关代码

│  ├─os_cpu                         操作系统+CPU的组合相关的代码

│  └─share                          平台无关的共通代码

│      ├─tools                        工具

│      │  ├─hsdis                      反汇编插件

│      │  ├─IdealGraphVisualizer       将server编译器的中间代码可视化的工具

│      │  ├─launcher                   启动程序“java”

│      │  ├─LogCompilation             将-XX:+LogCompilation输出的日志(hotspot.log)整理成更容易阅读的格式的工具

│      │  └─ProjectCreator             生成Visual Studio的project文件的工具

│      └─vm                           HotSpot VM的核心代码

│          ├─adlc                       平台描述文件(上面的cpu或os_cpu里的*.ad文件)的编译器

│          ├─asm                        汇编器接口

│          ├─c1                         client编译器(又称“C1”)

│          ├─ci                         动态编译器的公共服务/从动态编译器到VM的接口

│          ├─classfile                  类文件的处理(包括类加载和系统符号表等)

│          ├─code                       动态生成的代码的管理

│          ├─compiler                   从VM调用动态编译器的接口

│          ├─gc_implementation          GC的实现

│          │  ├─concurrentMarkSweep      Concurrent Mark Sweep GC的实现

│          │  ├─g1                       Garbage-First GC的实现(不使用老的分代式GC框架)

│          │  ├─parallelScavenge         ParallelScavenge GC的实现(server VM默认,不使用老的分代式GC框架)

│          │  ├─parNew                   ParNew GC的实现

│          │  └─shared                   GC的共通实现

│          ├─gc_interface               GC的接口

│          ├─interpreter                解释器,包括“模板解释器”(官方版在用)和“C++解释器”(官方版不在用)

│          ├─libadt                     一些抽象数据结构

│          ├─memory                     内存管理相关(老的分代式GC框架也在这里)

│          ├─oops                       HotSpot VM的对象系统的实现

│          ├─opto                       server编译器(又称“C2”或“Opto”)

│          ├─prims                      HotSpot VM的对外接口,包括部分标准库的native部分和JVMTI实现

│          ├─runtime                    运行时支持库(包括线程管理、编译器调度、锁、反射等)

│          ├─services                   主要是用来支持JMX之类的管理功能的接口

│          ├─shark                      基于LLVM的JIT编译器(官方版里没有使用)

│          └─utilities                  一些基本的工具类

└─test                             单元测试

2.Launcher简介

Launcher是一种用于JVM进程的启动器,并且可以根据类别划分为两种不同的Launcher,一种是正式版的启动器,也就是在Windows平台下经常用到的java.exe和javaw.exe程序。前者在运行时会保留控制台,以及显示程序的输出信息。而后者主要是用于执行Java的GUI程序,也就是说,使用javaw.exe执行java程序时将不会显示任何的程序的输出信息。注:不要认为Launcher就是虚拟机实现,其实从严格意义上来说,Launcher只是一个封装了虚拟机的执行外壳,由它负责装载JRE环境和Windows平台下的jvm.dll动态链接库。

3.使用Launcher启动JVM

剖析HotSpot的Launcher相关推荐

  1. java虚拟机精讲_Java虚拟机精讲 (高翔龙著) 带书签目录 中文PDF扫描版[63MB]

    <Java虚拟机精讲>内容简介:HotSpot VM是目前市面上高性能JVM的代表作之一,它采用解释器+JIT 编译器的混合执行引擎,使得Java 程序的执行性能从此有了质的飞跃.本书以极 ...

  2. 《Java虚拟机精讲》_笔记

    文章目录 1,Java体系结构 1.1 认识Java 1.2 重要概念 1.3 安装与配置 2,字节码的编译原理 2.1 javac编译器简介 2.2 词法解析 2.3 语法解析 2.4 语义解析 2 ...

  3. 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析

    重点 应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化. 分层编译由五层编译构成. 分层编译提供了极好的启动性能,并指导编译的下一层编译器提供高性能优化. 提供即时编译相关诊断信息的JV ...

  4. 如何下载hotspot源码

    怎么下载jvm的源码,当然下载的是openjdk的jvm源码: 1. http://hg.openjdk.java.net/ 选择格式下载即可: 各路径的意义: ├─agent             ...

  5. 下载hotspot源码

    这里穿插,怎么下载jvm的源码,当然下载的是openjdk的jvm源码: 1. http://hg.openjdk.java.net/ 选择格式下载即可: 各路径的意义: ├─agent Servic ...

  6. (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器

    引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...

  7. Java HotSpot VM 命令行参数【官方版】

    2019独角兽企业重金招聘Python工程师标准>>> Java HotSpot VM Command-Line Options Command-line options that ...

  8. try catch语句 java_深入剖析java的try…catch…finally语句

    一.前言 前些天参加面试的时候有一道题: public classtest { public static voidmain(String[] args){try{return; }finally{ ...

  9. Android实例剖析笔记(二)

    上篇文章分析了NotesList这个Activity,并着重剖析了其中的intent机制,本文将继续上篇未完的工作,以NotesList为实例介绍Android的菜单机制(尤其是动态菜单机制). 简介 ...

  10. 在Eclipse中进行HotSpot的源码调试--转

    原文地址:http://www.linuxidc.com/Linux/2015-05/117250.htm 在阅读OpenJDK源码的过程中,经常需要运行.调试程序来帮助理解.我们现在已经可以编译出一 ...

最新文章

  1. 【C++】STL队列和栈的使用
  2. 哪些因素不会限制linux服务器并发,嵌入式技术工程师 经典面试题(含答案)
  3. MySql分区表性能测试及切换案例
  4. Web前端面试题集锦
  5. 计算机控制lc72131,lc72131(1)
  6. 详解Python中的位运算符规则、原理与用法
  7. mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中
  8. 6.Linux/Unix 系统编程手册(上) -- 进程
  9. Python 之pdb调试
  10. 网站颜色搭配[收藏]
  11. Linux 查看日志命令tail的用法
  12. 外汇汇率接口 java_免费的货币汇率API
  13. 递推练习之费解的开关
  14. git:SSL证书问题:无法获取本地颁发者证书
  15. android 7原生动态壁纸,手机里都是定制OS?谷歌Android 7.0原生系统壁纸邀你来尝鲜!...
  16. 《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor
  17. C#设计程序购买商品总金额
  18. 数据库索引分裂 问题分析
  19. 电子商务中如何使用大数据
  20. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

热门文章

  1. VS 添加代理 -NUGET
  2. JDBC调用存储过程,以及存储过程 事务的使用.....
  3. Linux Web基础
  4. web安全day21:学习使用最基本的批处理程序
  5. iStack与CSS配置实例
  6. leetcode 9. 回文数(python)
  7. 实时计算在天猫双十一大屏中的应用
  8. Android Q 将增强未知来源应用安装的安全性
  9. Elastic-Job-Lite分析——作业调度器 JobScheduler 的创建过程
  10. java.lang.ClassCastException: $Proxy8 cannot be cast to org.hihernate.lob.SerialzableClob