毕业设计打算做一个java虚拟机,首先要对java虚拟机有一个简单的了解(jvm)。目前市面上有众多的jvm,如sun公司的HotSpot VM、Classic VM,IBM公司的J9 VM等等,这里以sun公司的HotSpot VM为蓝本实现一个java虚拟机。为什么选用hotspot呢,因为这个是目前jdk里面自带的并且是默认的jvm,也是使用最多的jvm。

  

  虽然世面上的jvm众多,但是所有的jvm都遵循一个标准——java虚拟机规范。这里我给出JAVA7的规范,https://pan.baidu.com/s/1Yj4Ai08hKl4DNgfNfkySYQ。

  上图是Java虚拟机的基本构成,包括类加载器子系统、运行时数据区、执行引擎以及本地方法接口等,其中运行时数据区又由方法区、堆、Java栈、PC寄存器和本地方法栈组成。这些基本组成都是实现一个Java虚拟机所必须的,因为Java虚拟机是一个规范,通过这个规范来让Java语言具有跨平台的特性,所以必须要遵守,否则就会破坏到Java语言的特性。

  介绍完了jvm,接着就是一系列准备工作。

  先选择语言,多数jvm是使用C\C++来编写的,因为C\C++是比较接近底层的语言,但是C\C++太过于复杂,我又比较怕指针,所以选择了一门比较小众的语言——GO。GO语言是google2012年推出的一门语言,go语言介于C和java之间(指与硬件的距离,C\C++更接近硬件),支持指针但不支持指针运算,更为安全,同时最重要的一点就是go语言自带垃圾回收,了解jvm的都知道垃圾回收是jvm里面一个非常重要也非常难的地方。

  然后是jdk,这里选用的是jdk1.8.0_144。安装好jdk,配置环境变量。配置过程,https://jingyan.baidu.com/article/e75aca85b29c3b142edac6a8.html。配置完成后,打开命令提示符,输入cmd回车,输入java -version回车,出现对应版本即表示配置成功。

  

  最后是安装go。从go的官网下载,https://golang.org/。如果go官网无法访问,也可以用http://golangtc.com/download下载。下载之后的如果是安装包,那直接安装并配置GOPATH环境变量即可(安装包会自动配置GOROOT变量)。如果是压缩包,那解压之后要配置GOROOT和GOPATH环境变量。GOPATH环境变量指定的是go语言的工作目录,go语言以包为单位组织源代码,这个包就放在GOPATH指定的目录下面。GOROOT指定的是go命令行工具文件夹,使用go命令时会自动在这个GOROOT下寻找go.exe。

  这里我配置的GOPATH为D:\JVM\goWorkSpace。如图

  

  配置完成后,打开命令提示符,cmd回车,输入对应信息会出现如下内容,即表示安装go并配置环境变量成功。

  

  最后说一下整个工作空间,我的GOPATH为D:\JVM\goWorkSpace,在这个文件夹下面创建src作为存放源码的文件夹,另外,当你后面运行和编译的时候会出现另外两个文件夹,pkg和bin,pkg为一些包信息,而bin中的为可执行文件。

  这样整个准备工作就做完了,接下来会一步步完成整个JVM。

手写java虚拟机(一)——搭建环境的更多相关文章

  1. 手写JAVA虚拟机(三)——搜索class文件并读出内容

    查看手写JAVA虚拟机系列可以进我的博客园主页查看. 前面我们介绍了准备工作以及命令行的编写.既然我们的任务实现命令行中的java命令,同时我们知道java命令是将class文件(字节码)转换成机器码 ...

  2. 手写JAVA虚拟机(二)——实现java命令行

    查看手写JAVA虚拟机系列可以进我的博客园主页查看. 我们知道,我们编译.java并运行.class文件时,需要一些java命令,如最简单的helloworld程序. 这里的程序最好不要加包名,因为加 ...

  3. [JVM] - 一份<自己动手写Java虚拟机>的测试版

    go语言下载 配置GOROOT(一般是自动的),配置GOPATH(如果想自己改的话) 参照<自己动手写Java虚拟机> > 第一章 指令集和解释器 生成了ch01.exe文件 这里还 ...

  4. TessorFlow学习 之 手写数字识别的搭建

    手写数字识别的搭建

  5. 6 手写Java LinkedHashMap 核心源码

    概述 LinkedHashMap是Java中常用的数据结构之一,安卓中的LruCache缓存,底层使用的就是LinkedHashMap,LRU(Least Recently Used)算法,即最近最少 ...

  6. 3 手写Java HashMap核心源码

    手写Java HashMap核心源码 上一章手写LinkedList核心源码,本章我们来手写Java HashMap的核心源码. 我们来先了解一下HashMap的原理.HashMap 字面意思 has ...

  7. Java/Andriod- 使用Eclipse搭建环境

    从网上找来的,做了一点小修改,我自己试了一下,1.3步骤我没去做,最后也不影响. 在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环 ...

  8. 2 手写Java LinkedList核心源码

    上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...

  9. 1 手写Java ArrayList核心源码

    手写ArrayList核心源码 ArrayList是Java中常用的数据结构,不光有ArrayList,还有LinkedList,HashMap,LinkedHashMap,HashSet,Queue ...

随机推荐

  1. 【Python】 linux中python命令的命令行参数

    Python命令行参数 原文地址:http://blog.163.com/weak_time/blog/static/25852809120169333247925/ Python的命令行参数,提供了 ...

  2. 自动化运维工具---expec

    作为运维经常操作Linux服务器是不可避免的事情的,那么你们都是怎么管理的呢? 我们管理的方式较为复杂了,我说一下: 有一套服务器资产管理系统,所有服务器都记录在上面,包括用户名密码,内外网地址都会有 ...

  3. 大数据 --> 安装Hadoop-单机模式(1)

    安装Hadoop-单机模式(1) 一.在Ubuntu下创建hadoop组和hadoop用户 1)创建hadoop用户组 sudo addgroup hadoop //添加用户组 2)创建hadoop用 ...

  4. 本地不安装oracle,PLsql远程连接

    Oracle的Instant client工具包可以很好地解决本地不安装oracle,PLsql远程连接. 1.首先到Oracle网站下载Instant Client : http://www.ora ...

  5. Jmeter 后置处理器 BeanShell_PostProcessor 适用思考

    首先摘抄一段官方文档的话: The following BeanShell variables are set up for use by the script: log - (Logger) - c ...

  6. android中shape属性大全

    出处:http://kofi1122.blog.51cto.com/2815761/521605

  7. 替换Java字符串中的“& lt;”为“<”

    发布webservice时 Java中的String类型会将 “<” 自动转换为 “<”,在建String转换为XML时就会出错,具体做法是: String strXml = “< ...

  8. Android开发心得-使用File ExPlorer无法访问系统内部文件

    问题:本机在获得ROOT权限后,使用Eclipse自带的File Explorer访问/data/data下各APP的存储文件,均无法打开.更换另外一个设备后,情况正常.Sumsung的有些机型在获得 ...

  9. dubbo服务简单搭建

    一.初识dubbo: 架构图: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的 ...

  10. 如何在jenkins上新建一个项目及其简单配置

    1.首先,点击[新建]进入选择页面,如下图(一般选择"构建一个自由风格的软件项目")     2.填好项目名称后,点击ok,跳转至如下页面,可以在这个页面进行项目的配置(包括拉源码 ...