手写java虚拟机(一)——搭建环境
毕业设计打算做一个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虚拟机(一)——搭建环境的更多相关文章
- 手写JAVA虚拟机(三)——搜索class文件并读出内容
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 前面我们介绍了准备工作以及命令行的编写.既然我们的任务实现命令行中的java命令,同时我们知道java命令是将class文件(字节码)转换成机器码 ...
- 手写JAVA虚拟机(二)——实现java命令行
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 我们知道,我们编译.java并运行.class文件时,需要一些java命令,如最简单的helloworld程序. 这里的程序最好不要加包名,因为加 ...
- [JVM] - 一份<自己动手写Java虚拟机>的测试版
go语言下载 配置GOROOT(一般是自动的),配置GOPATH(如果想自己改的话) 参照<自己动手写Java虚拟机> > 第一章 指令集和解释器 生成了ch01.exe文件 这里还 ...
- TessorFlow学习 之 手写数字识别的搭建
手写数字识别的搭建
- 6 手写Java LinkedHashMap 核心源码
概述 LinkedHashMap是Java中常用的数据结构之一,安卓中的LruCache缓存,底层使用的就是LinkedHashMap,LRU(Least Recently Used)算法,即最近最少 ...
- 3 手写Java HashMap核心源码
手写Java HashMap核心源码 上一章手写LinkedList核心源码,本章我们来手写Java HashMap的核心源码. 我们来先了解一下HashMap的原理.HashMap 字面意思 has ...
- Java/Andriod- 使用Eclipse搭建环境
从网上找来的,做了一点小修改,我自己试了一下,1.3步骤我没去做,最后也不影响. 在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环 ...
- 2 手写Java LinkedList核心源码
上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...
- 1 手写Java ArrayList核心源码
手写ArrayList核心源码 ArrayList是Java中常用的数据结构,不光有ArrayList,还有LinkedList,HashMap,LinkedHashMap,HashSet,Queue ...
随机推荐
- 【Linux】 用户管理
Linux用户管理 ■ 查看用户整体情况 cat /etc/passwd可以查看用户的一些基本信息.用finger <user>似乎更加方便 查看某一个特定的用户的话就可以 grep &l ...
- 15分钟理解HTTPS——通俗篇
| 导语 它很深奥吗?你肯定常常见过它,使用它,甚至离不开它... 它很浅显吗?你可能觉得看透它,理解它,甚至懂它... 让我们用15分钟,不那么学术地将它的深挖到底~ 什么?如何证明我是我?本文要上 ...
- 自己开发的 vue 滑动按钮组件 vue-better-slider
写在前面的 这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档. 一个 Vue 的滑动按钮组件,有 ...
- 深入解析C语言数组和指针
概述 指针是C语言的重点,同时也是让初学者认为最难理解的部分.有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言.暂且撇开这些观点不谈.这章是我在阅读<C和指针>这本书的读书笔记. ...
- MySQL的入门
SHOW VARIABLES LIKE 'storage_engine%' #查看引擎 ALTER TABLE `studten` RENAME `student1` #修改表名 ALTER TABL ...
- C作业--数据类型
一.PTA实验作业 题目1:7-3 倒顺数字串 1. 本题PTA提交列表 2. 设计思路(伪代码) (1)本题是要求输入倒顺序数串,首先看到这种题肯定是需要用到循环,那就先定一个整形i来进行循环,n是 ...
- APP的案例分析-美团外卖
大一才开始用软件订外卖了,很方便 ,上手快只要注册个账号登陆即可,支付时自动跳转到其他支付应用.严重的bug也没有,只有之前一段时间通过首单可以刷优惠,之后也修复了. 身边的同学也很多都在用.方便省 ...
- 源端控制的OpenFlow数据面
OpenFlow 交换机一般采用 TCAM 存储和查找流表,从而带来了扩展性.成本和能耗的问题.TCAM 成本和能耗过高,存储容量有限,一般交换机中的 TCAM 仅能存储几千条流表项,对 OpenFl ...
- 从PRISM开始学WPF(二)Prism?
目录: 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Modu ...
- NYOJ 炫舞家st
#include <iostream>#include <cstring>#include <algorithm>using namespace std; cons ...