当前位置: 首页 > news >正文

云梦网络 网站模板怎么做仿制网站

云梦网络 网站模板,怎么做仿制网站,大连免费建站,网页设计尺寸规范ps中文 | English | | | YVM是用C写的一个Java虚拟机#xff0c;现在支持Java大部分功能#xff0c;以及一个基于标记清除算法的并发垃圾回收器. 不过还有很多bug等待修复。 感兴趣的朋友pull request/fork/star吧。 Github repo https://github.com/racaljk/yvm 已支持语言… 中文 | English | | | YVM是用C写的一个Java虚拟机现在支持Java大部分功能以及一个基于标记清除算法的并发垃圾回收器. 不过还有很多bug等待修复。 感兴趣的朋友pull request/fork/star吧。 Github repo https://github.com/racaljk/yvm 已支持语言特性 高级特性逐步支持中可以开Issue提议或者直接PR Java基本算术运算流程控制语句面向对象。RTTI字符串拼接(,符号重载)异常处理(可输出stacktrace)创建异步线程Synchronized(支持对象锁)垃圾回收(标记清除算法)构建和运行 先决条件 Boost(1.65) 请在CMakeLists.txt中手动配置Boost库位置CMake(3.5)C14gcc/msvc/mingw均可老生常谈$ cd yvm $ cmake . $ make -j4 $ make test $ ./yvm --help Usage:--help List help documentations and usages.--runtime arg Attach java runtime libraries where yvm would lookup classes at--run arg Program which would be executed soon You must specify the runtime flag to tell yvm where it could find jdk classes, and also program name is required. $ ./yvm --runtimeC:\Users\Cthulhu\Desktop\yvm\bytecode ydk.test.QuickSort 运行效果 helloworld快速排序and more see its github repository readme.md...开发文档 1. 从字节码到对象 MethodArea负责管理字节码到JavaClass的完整生命周期。MethodArea的方法是自解释的 class MethodArea { public:// 方法区需要从运行时目录中搜索相关的*.class文件MethodArea(const vectorstring libPaths);~MethodArea();// 查看一个类是否存在JavaClass* findJavaClass(const string jcName);//加载jcName类bool loadJavaClass(const string jcName);//移除jcName该方法用于垃圾回收器bool removeJavaClass(const string jcName);//链接jcName类初始化static字段void linkJavaClass(const string jcName);//初始化jcName初始化静态字段调用static{}void initJavaClass(CodeExecution exec, const string jcName);public://辅助方法如果不存在jcName则加载 JavaClass* loadClassIfAbsent(const string jcName);//如果未链接jcName则链接void linkClassIfAbsent(const string jcName);//如果未初始化jcName则初始化void initClassIfAbsent(CodeExecution exec, const string jcName); } 假设磁盘存在一个Test.class文件它会经历如下过程 Test.class[磁盘中]- loadJavaClass(Test.class)[内存中] - linkJavaClass(Test.class)-initJavaClass(Test.class) 现在虚拟机就可以使用这个JavaClass创建对应的对象了 // yrt 是全局运行时对象ma表示方法区模块,jheap表示堆模块 JavaClass* testClass yrt.ma-findJavaClass(Test.class); JObject* testInstance yrt.jheap-createObject(*testClass); 2.1 对象内部构造 虚拟机执行时栈上存放的都是JObject,它的结构如下 struct JObject {std::size_t offset 0; const JavaClass* jc{}; }; offset唯一代表一个对象所有在堆上面的操作都需要这个offset。jc指向对象的Class表示。 堆中的对象是按照offset,fields方式进行存放的 [1] - [field_a, field_b, field_c] [2] - [] [3] - [field_a,field_b] [4] - [field_a] [..] - [...] 只要我们持有offset就可以查找/添加/删除对应的field 数组几乎和上面类似,只是多了长度少了Class指针 struct JArray {int length 0;std::size_t offset 0; }; [1] - 3, [field_a, field_b, field_c] [2] - 0, [] [3] - 2, [field_a,field_b] [4] - 1, [field_a] [..] - ..,[...] 2.2 从对象创建到消亡 上面提到对象持有一个offset和jc其中jc表示的JavaClass是由MethodArea负责管理的offset则是由JavaHeap负责管理。JavaHeap提供了大量API这里选取的是最重要的: class JavaHeap { public://创建对象和数组JObject* createObject(const JavaClass javaClass);JArray* createObjectArray(const JavaClass jc, int length);//获取对象字段auto getFieldByName(const JavaClass* jc, const string name,const string descriptor, JObject* object);//设置对象字段void putFieldByName(const JavaClass* jc, const string name,const string descriptor, JObject* object,JType* value);//设置数组元素void putElement(const JArray array, size_t index, JType* value);//获取数组元素auto getElement(const JArray array, size_t index);//移除对象和数组void removeArray(size_t offset;void removeObject(size_t offset); }; 还是Test.class那个例子假设对应的Test.java构造如下: public class Test{public int k;private String hello; } 在第一步我们已经获取到了Test类在虚拟机中的类表示以及对象表示,现在就可以对类的字段进行操作了 const JavaClass* testClass yrt.ma-findJavaClass(Test.class); JObject* testInstance yrt.jheap-createObject(*testClass); //获取hello字段 JObject* helloField yrt.jheap-getFieldByName(testClass,hello,Ljava/lang/String;,testInstance); //设置k字段 yrt.jheap-putFieldByName(testClass,k,I,testInstance); Ⅰ. 关于JDK 部分JDK类是JVM运行攸关的,但由于JDK比较复杂不便于初期开发,所以这里用重写过的JDK代替,源码参见javaclass目录,可以使用compilejava.bat进行编译编译后*.class文件位于bytecode. 目前重写过的JDK类有: java.lang.Stringjava.lang.StringBuilderjava.lang.Throwablejava.lang.Math(::random())java.lang.Runnablejava.lang.Thread Wiki和源码中有很多详细的开发文档如果想探索关于YVM的更多内容请移步浏览. License 所有代码基于MIT协议 转载于:https://www.cnblogs.com/ysherlock/p/8688454.html
http://www.zqtcl.cn/news/610615/

相关文章:

  • 成都络迈品牌网站建设网站建设的行业资讯、
  • 英语网站大全免费赤峰市建设厅官方网站
  • 宁波网站建设熊掌号成都网络关键词排名
  • 织梦网站改版需要怎么做平台设计软件
  • 企业展示型网站网站建设设计
  • 增城网站建设服务网站建设制作设计公司佛山
  • 微网站套餐自媒体网站源码模板dede
  • 企业网站改版升级成都便宜网站建设公司
  • 广州公共资源建设工程交易中心网站新塘做网站
  • 数码港 太原网站开发公司iis 建立子网站
  • 做一个自己的网站需要什么商标设计网站猪八戒
  • 傻瓜式网站建设软件保险预约
  • 网站 备案规定自己做简单网站
  • 网站上怎么做支付接口南乐网站建设
  • 咸阳网站建设公司电话做个公司网站大概多少钱
  • 网站如何做关键词排名点子网创意网
  • 浙江建设培训考试网站河源东莞网站建设
  • 网站移动端做pc端的301跳转哪些网站是增值网
  • wordpress新闻站浙江耀华建设集团网站
  • 网站开发代理企业网站推广技巧和方法
  • 俄语网站开发用模板做的网站多少钱
  • 丽水网站建设公司广州网络公司
  • 做基金的网站哪个好针对大学生推广引流
  • 国外对旅游网站的建设互联网推广和互联网营销
  • 海南省建设厅网站首页有什么做设计的兼职网站
  • 网站导航功能苏州市高新区建设局网站
  • jsp网站 值班多语种网站开发
  • 公司网站英文做电商
  • 合肥企业网站建设公司哪家好卖产品怎么做网站
  • 网站建设公司86215中国中小企业网站