第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

閱讀Java Native源碼前的準備

標簽:
Java

前言

读java native源代码时,我们一般会去网站下载openjdk8源码http://download.java.net/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip ),然后进行分析,随后很多文章会让你编译。其实,如果只是为了分析源码,完全不用编译,直接找到hotspot文件夹下的src文件夹查看即可,这里就是hotspot的源码。

注意:官网的源码下载地址写错了,它写成了http://www.java.net/download/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip,这个网址是打不开的。

存在的问题

源码中的include 路径不全,导致很多函数无法跳转,只得手动查找,很不方便。以 ./src/cpu/sparc/vm/assembler_sparc.cpp文件为例,原始代码是这样的:

复制代码

#include "precompiled.hpp"#include "asm/assembler.hpp"#include "asm/assembler.inline.hpp"int AbstractAssembler::code_fill_byte() {  return 0x00;                  // illegal instruction 0x00000000}

复制代码

我们希望是这样的:

复制代码

#include "./src/share/vm/precompiled/precompiled.hpp"#include "./src/share/vm/asm/assembler.hpp"#include "./src/share/vm/asm/assembler.inline.hpp"int AbstractAssembler::code_fill_byte() {  return 0x00;                  // illegal instruction 0x00000000}

复制代码

,一类是包含在文件夹./src/share/vm下的各个头文件,如asmprimsooputilities等,因此解决步骤如下:

  1. 对于"precompiled.hpp",我们可以直接用编辑器将其全部替换为include "./src/share/vm/precompiled/precompiled.hpp";

  2. 对于其他诸如include "asm/assembler.hpp"#include "oops/oop.inline.hpp"#include "utilities/accessFlags.hpp"等依赖不同文件路径的头文件,利用本项目中的程序自动将其补全。

实现原理

  1. 遍历src文件夹下的所有文件,找出后缀为cpphppch的文件,将其保存在List中;同时将对应的文件夹路径保存在Set中(之所以选择Set而不是List是因为同一文件夹下可能有很多文件,而文件夹保存一次就好);

  2. 处理List中保存的文件,每个文件处理时读取Set中匹配的文件夹,将诸如#include "asm等形式替换成#include "./src/share/vm/asm,即可。

其他问题

还有一些文件依赖于特定的平台,如./src/share/vm/utilities/copy.hpp中:

复制代码

#ifdef TARGET_ARCH_x86
# include "copy_x86.hpp"#endif#ifdef TARGET_ARCH_sparc
# include "copy_sparc.hpp"#endif#ifdef TARGET_ARCH_zero
# include "copy_zero.hpp"#endif#ifdef TARGET_ARCH_arm
# include "copy_arm.hpp"#endif#ifdef TARGET_ARCH_ppc
# include "copy_ppc.hpp"#endif

复制代码

此种代码程序并未处理,因此依赖平台的函数还是有可能找不到,有需要的可以将程序中的

static String startInclude = "#include \"";替换为static String startInclude = "# include \"";再运行一次即可(注意#和include之间多了一个空格)。

源码

请移步Github:https://github.com/xiaoxi666/ModifyIncludePath

运行须知

本程序运行时,建议将hotspot的源码目录src单独放在工程下的一个文件夹(本项目中为/Resource)中,防止混乱。

原文出处:https://www.cnblogs.com/xiaoxi666/p/9530064.html

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消