您的位置:网站首页 > Java教程 > 正文

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

类别:Java教程 日期:2019-1-23 8:38:28 人气: 来源:

  咱们知道,咱们编译.java并运转.class文件时,需求一些java指令,如最简略的helloworld程序。

  Java初学者有什么不懂的可以私信我——我刚整理了一套2018最新的0基础入门和进阶教程,分享。

  获取方法:私信小编回复:资料(点开小编头像,右上角有发私信)群里还有开发工具和安装包,以及系统学习线图

  看这儿的指令。javac为编译指令,咱们知道java的特点是一次编译,处处运转。这儿的编译指的就是javac,关于java程序即.java文件,先要用javac编译成字节码。然后将字节码(.class文件)放到java虚拟机中运转,即上图中的java HelloWorld,java虚拟机把字节码翻译成对应机器上的机器指令,再由机器来履行详细的机器指令。也就是说java程序员是直接与java虚拟机交互,简介与机器交互。所以虚拟机完结的是java指令,也就是咱们要完结的是java这个指令的功用。

  那么咱们把榜首个方针定为,完结简略的指令行。即咱们经过指令行能够输入一些内容,虚拟机读取之后能够给必定的反应。

  GO言语中有两个和指令行相关的包,分别是os和flag(java中以类库即jar文件导入,go中直接以包的办法导入)。

  首先在GOPATH目录下的src里边新建一个jvmgo文件夹作为咱们的作业空间目录,jvmgo里边再新建一个ch01为咱们的榜首个方针源码文件夹,增加cmd.go文件。

  在cmd.go里边输入如下代码(因为博客园的增加代码办法不支持go言语上色,所以选用C言语上色,高亮可能不太正确)

  榜首行为包名,main包,接着引入了三个包os,flag,fmt。os和flag都是处理指令行所需的包,fmt类似于C言语的printf和scanf等格式化IO。再往下界说了一个结构体Cmd,用来这个数据结构来格式化存储输入的指令行信息。helpFlag参数为指令行是否恳求help,versionFlag参数为指令行是否恳求version,cpOption为指令行传入的classpath即方针.class文件地点文件夹,class为指令行传入的.class文件名(不包括.class),args为指令行传入的其他参数。

  紧接着是一个parseCmd函数(go言语有函数和办法之分,办法调用需求receiver,函数调用则不需求 ),回来值为*Cmd,用来解析cmd传过来的参数。该函数里边先声明一个cmd并给这个cmd赋值一个新建的Cmd对象。go言语中的“:=”为声明并赋值,而=为赋值。先把printUsage的函数赋值给flag.Usage,然后调用flag设置需求解析的选项,悉数解析结束,调用Parse函数解析一切选项。解析成功则结束,解析失利则调用printUsage打印到控制台。

  flag.Args能够捕获其他没有被解析的参数。解析成功之后,榜首个参数就是主类名,剩余的就是传给主类的参数。

  跟java类似,在go里边main是一个特殊的包,go程序的入口就是main函数,可是不接受任何参数,也不能有回来值。main函数先调用parseCmd解析指令行参数,假如是-version则回来版本号,假如是-help则回来协助信息,假如是其他则发动jvm,这儿用一些输出信息“伪装”发动了jvm,真正的jvm代码后边会加上。

  至此,对指令行的解析作业悉数完结。先展现一下整个作业目录的结构,不然后边编译运转的时分会犯错。

  到这儿,咱们的指令行东西就完结了,尽管还没有触及真正的虚拟机规划,但这也是虚拟机运转的重要一步,后边会逐渐介绍虚拟机的规划。

  由于每个办法都是获取同一把锁(mutex),这就意味着,put和remove等操作是互斥的,大大减少了并发量。

  在 ConcurrentHashMap内部有一个Segment段,它将大的HashMap切分成若干个段(小的HashMap),然后让数据在每一段上Hash,这样多个线程在不同段上的Hash操作一定是线程安全的,所以只需要同步同一个段上的线程就可以了,这样完成了锁的别离,大大增加了并发量。

  在运用ConcurrentHashMap.size时会比较费事,由于它要计算每个段的数据和,在这个时分,要把每一个段都加上锁,然后再做数据计算。这个就是把锁别离后的小小坏处,可是size办法应该是不会被高频率调用的办法。

  在完成上,不运用synchronized和lock.lock而是尽量运用trylock,一起在HashMap的完成上,也做了一点优化。这儿就不提了。

  张翰眼睛密集图

0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved