JDK源码阅读环境搭建
本次针对jdk8u版本的搭建
1.新建项目
新建java项目JavaSourceLearn ,这里我创建的是maven
2.获取JDK源码
打开Project Structure
找到本地JDK安装位置将src.zip解压到项目java包中
整理下项目结构,删除用不到的目录
提示: 添加源码到项目之后首次运行需要较长时间进行编译,建议先设置好进程堆,防止编译失败
3.构建进程堆大小
打开File -> Settings -> Build, Execution, Deployment -> Compiler
设置Build process heap size (Mbytes)
4.调试设置
打开File -> Settings -> Build, Execution, Deployment -> Debugger -> Stepping
取消Do not step into the classes
说明: 该设置勾选后会在Debug时不进入到相关类路径下的方法内
5. 设置源码路径
为了能够注释以及避免修改到其他项目所使用的内容,
1.添加一个名为“JavaSourceLearn1.8”的SDK
2.并将Sourcepath修改为当前项目src下的源码内容(新增)
3.移除Sourcepath中关联的src.zip(删除)
修改项目使用的JDK为新建的JavaSourceLearn1.8
说明: 原先JDK源码包为锁定状态,Debug进入源码后无法修改/添加注释 ,这样就可以添加注释了
6. 解决报错问题
找不到UNIXToolkit和FontConfigManager
这是因为在Windows平台下缺少了这2个java类文件所导致的。
这2个类文件可在OpenJDK网站上找到,地址:http://openjdk.java.net/,打开后点Mercurial,点jdk8u,点jdk,点browse,点src,点solaris,点classes,点sun,可以找到2个文件夹,awt和font,缺少的2个文件分别在这2个文件夹下
按照下图所示目录结构,新建同样名字的目录和空内容的文件
打开openJDK上同样名字的java文件,把对应的内容复制到IDEA
程序包com.sun.tools.javac.*不存在
这是缺少tools的jar包所导致的。
点击File–>Project Structure–>SDKs,手动把jdk8的tools.jar包添加到JavaSourceLearn1.8,
这些都解决了,重新build发现还是有错误
GTKLookAndFeel类依然报红
百度了一下也没有找到原因,觉得这是和Unit平台相关的判断,应该问题不大,注释掉启动果然OK
7.代码换行注释后, debug 错行的问题
之后在这里的源码中换行注释,打断点 debug 会出现错行的问题,并且无法显示局部变量,提示 source code does not match bytecode。
临时解决方案:E:\workspace\JavaSourceLearn\target\classes为当前项目编译后classes的路径
让BootStrapClassLoader优先加载我们的类
-Xbootclasspath/p:"E:\workspace\JavaSourceLearn\target\classes"
在测试类中配置VM options
这样就不受注释的影响了,这样每次都要配置,可以配置一个模板,每次创建都自动指定
新建测试
/*** @author Dongguo* @date 2021/8/20 0020-9:47* @description:*/
class MyTest {@Testpublic void test1() {String array[] = {"hello", "world", "java"};List<String> list = new ArrayList<String>(Arrays.asList(array));list.add("zhangsan");System.out.println(list);list.remove("zhangsan");System.out.println(list);}
}
启动调试,F7调试进入源码内部
此时进入到我们自己搭建的源码阅读环境中。并且可以在源码中添加自己的注释。
github
如果文章有问题请留言。
相关文章:

JDK源码阅读环境搭建
本次针对jdk8u版本的搭建 1.新建项目 新建java项目JavaSourceLearn ,这里我创建的是maven 2.获取JDK源码 打开Project Structure 找到本地JDK安装位置将src.zip解压到项目java包中 整理下项目结构,删除用不到的目录 提示: 添加源码到项目之后首次运行…...

基本定时器工作模式
计数和定时 BasicTimer支持8位或16位向上计数模式。当计数值大于等于比较寄存器(CMPH、CMPL),会产生计数中断标志,并从自动重载寄存器(LOADH、LOADL)加载新的比较值。这样可以实时调整每个计数周期的计数长…...
【华为OD机试真题2023B卷 JAVA】报文重排序
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 报文重排序 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 对报文进行重传和重排序是常用的可靠性机制,重传缓冲区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。。 输入描…...
【Docker】- 02 Docker-Compose
Docker-Compose Docker-Compose1 下载并安装Docker-Compose1.1 下载Docker-Compose1.2 设置权限1.3 配置环境变量1.4 测试 2 Docker-Compose管理MySQL和Tomcat容器3 使用docker-compose命令管理容器4 docker-compose配合Dockerfile使用4.1 docker-compose文件4.2 Dockerfile文件…...

工业相机的Pixel Binning和Pixel Skipping
一般图像传感器的不同分辨率都对应着不同的帧率。如果想要提高帧率,就要考虑是否需要缩小视野。若不希望视野缩小,就需要减小分辨率(resolution)。常用的减少分辨率的两种采样方式是:Skipping和Binning。 什么是Binni…...
c++ 11标准模板(STL) std::set(八)
定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...

linux服务器断电重启后,发现时间误差八小时
文章目录 问题现象排查与解决时间同步与设置服务器时钟介绍 问题现象 客户的服务器已部署好平台,放入了机房,运行正常。服务器系统时间设置东八区(CST),时间日期也已修改正确客户是我省的某小县城,某台晚上…...
兼容人大金仓,异常信息报错解决大全
乱码报错 ISO-8859-1 SQL 错误 [55006]: : "ssss" (kbjdbc: autodetected server-encoding to be ISO-8859-1, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf) Detail: 3. : "sss…...
短睡眠 堀大辅 超短眠 人生更丰富
堀大辅是位每天只睡半小时的日本狠人,更多信息自行百度。以下内容,个人收集总结,仅供参考。 堀大辅大胆假设「只要能够减少睡眠的时间,我就能过得更充实」,便与朋友付诸行动,通过纪录观察每天的睡眠时数&a…...

私有GitLab仓库 - 本地搭建GitLab私有代码仓库并随时远程访问「内网穿透」
文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自远控源码文章:Linux搭建GitLab私有仓库,并内网穿透实现公…...

Debezium系列之:Debezium镜像仓库Quay.io,使用Debezium镜像仓库的方法和案例
Debezium系列之:Debezium镜像仓库Quay.io,使用Debezium镜像仓库的方法和案例 一、Debezium镜像仓库变动二、镜像仓库[Quay.io](https://quay.io/organization/debezium)三、使用镜像仓库Quay.io方法四、使用镜像仓库下载Debezium UI一、Debezium镜像仓库变动 Debezium2.2版本…...

文心一言和ChatGPT最全对比
文心一言和ChatGPT都是基于深度学习技术的自然语言处理模型,有各自的优势和使用场景,无法简单地比较 ChatGPT 和文心一言哪一个功能更强大,它们各自具有优势和局限性,需要根据具体需求进行选择,以下一些具体对比&#…...

龙芯2K1000实战开发-平台介绍
文章目录 概要整体架构流程技术名词解释技术细节小结概要 龙芯 2K1000 处理器主要面向于网络应用,兼顾平板应用及工控领域应 用。采用 40nm 工艺,片内集成 2 个 GS264 处理器核,主频 1GHz,64 位 DDR3 控制器,以及各种系统 IO 接口。 整体架构 龙芯 2K1000 的结构如图 所…...

C++ map用法总结(整理)
1,map简介 map是STL的一个关联容器,它提供一对一的hash。 第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value); map以模板(泛型)方式实现,可以存储任意类型的…...
面向对象的第二个基本特征:继承011026
1.什么是继承? 生活中: 继承 ---> 延续 ---> 扩展 代码中: 继承 ---> 重复使用已有的类的代码(复用) ---> 扩展已有类的代码(扩展) 2.为什么要继承? ① 代码的复用和…...

机器学习项目实战-能源利用率 Part-3(特征工程与特征筛选)
博主前期相关的博客可见下: 机器学习项目实战-能源利用率 Part-1(数据清洗) 机器学习项目实战-能源利用率 Part-2(探索性数据分析) 这部分进行的特征工程与特征筛选。 三 特征工程与特征筛选 一般情况下我们分两步走…...

WebSocket的那些事(2-实操篇)
目录 一、概述二、Websocket API1、引入相关依赖2、配置WebSocket处理器3、WebSocket配置4、测试 三、总结 一、概述 在上一节 WebSocket的那些事(1-概念篇)中我们简单的介绍了关于WebSocket协议的相关概念、与HTTP的联系区别等等。 这一节将会带来Web…...

BurpSuite—-Target模块(目标模块)
前言 本文主要介绍BurpSuite—-Target模块(目标模块)的相关内容 关于BurpSuite的安装可以看一下之前这篇文章: http://t.csdn.cn/cavWt Target功能 目标工具包含了SiteMap,用你的目标应用程序的详细信息。它可以让你定义哪些对象在范围上为你目前的工…...

部门来了个测试开发,听说是00后,上来一顿操作给我看呆了...
公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司实习半年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!…...

Godot引擎 4.0 文档 - 入门介绍 - Godot简介
本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面:Introduction to Godsot — Godot Engine (stable) documentation in English Godot简介 本文旨在帮助您确定 Godot 是否适合您。我们将介绍该引擎的一些广泛功能&#…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...