精华内容
下载资源
问答
  • idea构建jdk源码环境
    2021-06-24 10:38:59

    idea构建jdk源码环境

    首先把源码解压缩到项目src下,项目初次运行会缺少UNIXToolkit和FontConfigManager俩个类,这个可以在网上查找,然后添加到相应的包下。
    在这里插入图片描述在这里插入图片描述删除原先项目的jdk环境,选择自己项目的jdk环境,导入toolsJar包
    在这里插入图片描述
    在这里插入图片描述加载jdk源码可能会出现资源不足,更改Build process heap size,修改为更大的数值例如1000(可以设置更大)
    在这里插入图片描述开放jdk源码BUG调试
    在这里插入图片描述

    更多相关内容
  • JDK源码包.zip

    2020-03-11 19:20:24
    解决在eclipse,myeclipse,idea等开发工具中追源码时遇到追不到的情况,因为本身JDK里面的源码文件只有20MB远远不完整,内含Java源码包,使用方法等,希望能够帮助到更多的喜欢看源码的技术朋友。
  • 不过话说回来,对于这个天天使用的东西,我们难道不好奇这玩意儿它到底是怎么由源码编译出来的吗? 带着这个原始的疑问,今天准备大干一场,自己动动呆萌的小手,来编译一个属于自己的JDK吧! 对了,本文在开源项目...

    image


    好奇害死羊

    很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上。

    一般来说,我们学Java之前,第一步就是安装JDK环境。这个简单啊,我们一般直接把JDK从官网下载下来,安装完成,配个环境变量就可以愉快地使用了。

    不过话说回来,对于这个天天使用的东西,我们难道不好奇这玩意儿它到底是怎么由源码编译出来的吗?

    带着这个原始的疑问,今天准备大干一场,自己动动呆萌的小手,来编译一个属于自己的JDK吧!

    对了,本文在开源项目:https://github.com/hansonwang99/JavaCollection 中已收录,包含自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…


    还有个待填的坑

    记得之前不是出过一期关于《JDK源码阅读环境搭建》相关的视频以及文章嘛,细心的小伙伴,可能会发现一个很实际的问题

    我们将src.zip包里的JDK源码解压出来,关联到这份源码之后,调试时是可以进,但是我们在加注释的时候却只能在行尾添加,并不能改变原代码的行结构。换句话说,如果在源码中加了跨行的多行注释,则debug调试的时候就会出现当前行的运行错位问题,这个有点尴尬了。

    当然那个视频的评论区,的确也有几个小伙伴提了这个问题:

    image

    image

    image

    原因也很简单,因为实际支撑调试运行的代码,并不是我们解压出来的那份JDK源码,那个仅仅是做关联用,实际运行用到的JDK,还是之前系统安装好的那个JDK环境。

    要想解决这个问题,那就只能使用自己修改过的代码来自行编译生成自己的JDK,然后用到项目中去!

    所以什么都憋说了,肝就完了!


    环境准备

    首选说在前面的是,编译前的软件版本关系极其重要,自己在踩坑时,所出现的各种奇奇怪怪的问题几乎都和这个有关,后来版本匹配之后,就非常顺利了。

    我们来盘点和梳理一下编译一个JDK需要哪些环境和工具:

    1、boot JDK

    我们要想编译JDK,首先自己本机必须提前已经安装有一个JDK,官方称之为bootstrap JDK(或者称为boot JDK)。

    比如想编译JDK 8,那本机必须最起码得有一个JDK 7或者更新一点的版本;你想编译JDK 11,那就要求本机必须装有JDK 10或者11

    所以鸡生蛋、蛋生鸡又来了…

    2、Unix环境

    编译JDK需要Unix环境的支持!

    这一点在Linux操作系统和macOS操作系统上已经天然的保证了,而对于Windows兄弟来说稍微麻烦一点,需要通过使用Cygwin或者MinGW/MSYS这种软件来模拟。

    就像官方所说:在Linux平台编译JDK一般问题最少,容易成功;macOS次之;Windows上则需要稍微多花点精力,问题可能也多一些。

    究其本质原因,还是因为Windows毕竟不是一个Unix-Like内核的系统,毕竟很多软件的原始编译都离不开Unix Toolkit,所以相对肯定要麻烦一些。

    3、编译器/编译工具链

    JDK底层源码(尤其JVM虚拟机部分)很多都是C++/C写的,所以相关编译器也跑不掉。

    一图胜千言,各平台上的编译器支持如下表所示,按平台选择即可:

    4、其他工具

    典型的比如:

    • Autoconf:软件源码包的自动配置工具
    • Make:编译构建工具
    • freetype:一个免费的渲染库,JDK图形化部分的代码可能会用它

    好,环境盘点就到这里,接下来具体列一下我在编译JDK 8JDK 11时分别用到的软件详细版本信息:

    编译JDK 8时:

    • 操作系统:macOS 10.11.6
    • boot JDK:JDK 1.8.0 (build 1.8.0_201-b09)
    • Xcode版本:8.2
    • 编译器:Version 8.0.0 (at /usr/bin/clang)

    编译JDK 11时:

    • 操作系统:macOS 10.15.4
    • boot JDK:JDK 11.0.7 (build 11.0.7+8-LTS)
    • Xcode版本:11.5
    • 编译器:Version 11.0.3 (at /usr/bin/clang)

    大家在编译时如果过程中有很多问题,大概率少软件没装,或者软件版本不匹配,不要轻易放弃,需要耐心自查一下。


    下载JDK源码

    下载JDK源码其实有两种方式。

    方式一:通过Mercurial工具下载

    Mercurial可以理解为和Git一样,是另外一种代码管理工具,安装好之后就有一个hg命令可用。

    image

    OpenJDK的源码已经提前托管到http://hg.openjdk.java.net/

    因此,比如下载JDK 8,可直接hg clone一下就行,和git clone一样:

    hg clone http://hg.openjdk.java.net/jdk8/jdk8
    

    同理,下载JDK 11

    hg clone http://hg.openjdk.java.net/jdk/jdk11
    

    但是这种方式下载速度不是很快。

    方式二:直接下载打包好的源码包

    下载地址:https://jdk.java.net/

    image

    选择你想要的版本下载即可。


    编译前的自动配置

    源码包下载好,放到本地某个目录(建议路径纯英文,避免不必要的麻烦),解压之,然后进入源码根目录,执行:

    sh configure
    

    当然这里运行的是默认配置项。

    这一步会进行一系列的自动配置工作,时间一般很快,最终如果能出现一下提示,那么很幸运,编译前的配置工作就完成了!

    这里我给出我自己分别在配置JDK 11JDK 8时候完成时的样子:

    配置JDK 8完成:

    image

    配置JDK 11完成:

    image

    注: 如果这一步出错,大概率是某个软件环境未装,或者即使装了,但版本不匹配,控制台打印日志里一般是会提醒的。

    比如我在配置JDK 8的时候,就遇到了一个errof:GCC compiler is required的问题:

    image

    明明系统里已经有编译器,但还是报这个错误。通过后来修改 jdk源码根目录/common/autoconf/generated-configure.sh文件,将相关的两行代码注释后就配置通过了

    image

    image

    配置完成,接下来开始执行真正的编译动作了!


    真正的编译动作

    我们这里进行的是全量编译,直接在我们下载的JDK源码根目录下执行如下命令即可:

    make all
    

    这一步编译需要一点时间,耐心等待一下即可。编译过程如果有错误,会终止编译,如果能看到如下两个画面,那么则恭喜你,自己编译JDK源码就已经通过了,可以搞一杯咖啡庆祝一下了。

    JDK 8编译完成:

    image

    JDK 11编译完成:

    image

    从两张图的对比可以看出,编译JDK 8JDK 11完成时在输出上还是有区别的。时间上的区别很大程度上来源于JDK 11的编译机配置要高不少。


    验证成果

    JDK源码编译完成之后肯定会产生和输出很多产物,这也是我们所迫不及待想看到的。

    由于JDK 8JDK 11的源码包组织结构并不一样,所以输出东西的内容和位置也有区别。我们一一来盘点一下。

    1、JDK 8的编译输出

    编译完成,build目录下会生成一个macosx-x86_64-normal-server-release目录,所有的编译成果均位于其中。

    首先,编译出来的Java可执行程序可以在如下目录里找到:

    jdk源码根目录/build/macosx-x86_64-normal-server-release/jdk/bin

    进入该目录后,可以输入./java -version命令验证:

    image

    其次,编译生成的成品JDK套装,可以在目录

    jdk源码根目录/build/macosx-x86_64-normal-server-release/images
    

    下找到,如图所示:

    image

    其中:

    • j2sdk-image:编译生成的JDK
    • j2re-image:编译生成的JRE

    进入j2sdk-image目录会发现,里面的内容和我们平时从网络上下载的成品JDK内容一致。

    image

    2、JDK 11的编译输出

    JDK 11的源码目录组织方式和JDK 8本身就有区别,编译生成的产物和上面编译JDK 8的输出有一定区别,但也不大。

    JDK 11编译完成,同样在build目录下会生成一个macosx-x86_64-normal-server-release目录,所有的编译成果均位于其中。

    同样编译出来的Java可执行程序可以在目录

    JDK源码根目录/build/macosx-x86_64-normal-server-release/jdk/bin

    下看到,进入该目录后,也可以输入./java -version命令验证:

    image

    其次,编译生成的成品JDK 11套装,可以在目录

    JDK源码根目录/build/macosx-x86_64-normal-server-release/images
    

    下找到,如图所示:

    image

    其中jdk目录就是编译生成的成品JDK 11套装。


    使用自己编译的JDK

    既然我们已经动手编译出了JDK成品,接下来我们得用上哇。

    新建一个最最基本的Java工程,比如命名为JdkTest,目的是把我们自己编译出的JDK给用上。

    image

    我们点开Project Structure,选到SDKs选项,新添加上自己刚刚编译生成的JDK,并选为项目的JDK,看看是否能正常工作

    image

    image

    点击确定之后,我们运行之:

    image

    可以看到我们自己编译出的JDK已经用上了。


    关联JDK源码并修改

    我们继续在上一步JdkTest项目的Project StructureSDKs里将JDK源码关联到自行下载的JDK源码路径上:

    image

    这样方便我们对自己下载的JDK源码进行阅读调试修改、以及在源码里随意做笔记加注释

    举个最简单的例子,比如我们打开System.out.println()这个函数的底层源码:

    image

    我们随便给它修改一下,加两行简单的标记,像这样:

    image

    为了使我们新加的代码行生效,我们必须要重新去JDK源码的根目录中再次执行 make images重新编译生成JDK方可生效:

    image

    因为之前已经全量编译过了,所以再次make的时候增量编译一般很快。

    重新编译之后,我们再次运行JdkTest项目,就可以看到改动的效果了:

    image


    多行注释的问题

    记得之前搭建《JDK源码阅读环境》时,大家可能发现了一个问题:阅读源码嘛,给源代码做点注释或笔记很常见!但那时候有个问题就是做注释时不可改变代码的行结构(只能行尾注释,不能跨行注释),否则debug调试时会出现行号错位的问题。

    原因很简单,因为我们虽然做了源代码目录的映射,但是实际支撑运行的JDK还是预先安装好的那个JDK环境,并不是根据我们修改后的源码来重新编译构建的,所以看到这里,解决这个问题就很简单,就像上面一样自行编译一下JDK即可。

    实际在实验时,还有一个很典型的问题是,当添加了多行的中文注释后,再编译居然会报错!

    比如,还是以上面例子中最简单的System.out.println()源码为例,我们添加几行中文注释:

    image

    这时候我们去JDK源码目录下编译会发现满屏类似这样的报错:

    错误: 编码 ascii 的不可映射字符

    image

    顿时有点懵,毕竟仅仅是加了几行注释。对于我们来说,源码里写点多行的中文注释基本是刚需,然而编译竟会报错,这还能不能让人愉快的玩耍了… 当时后背有点发凉。

    实不相瞒,就这个问题排查了一段时间,熬到了很晚。最终折腾了一番,通过如下这种方式解决了,顺便分享给小伙伴们,大家如果遇到了这个问题,可以参考着解决一下。

    因为从控制台的报错可以很明显的看出,肯定是字符编码相关的问题导致的,而且都指向了ascii这种编码方式。

    于是将JDK的源码从根目录导入了Vs Code,然后全目录查找encoding ascii相关的内容,看看有没有什么端倪,结果发现

    jdk源码根目录/make/common/SetupJavaCompilers.gmk文件中有两处指定了ascii相关的编码方式:

    image

    于是尝试将这两处-encoding ascii的均替换成-encoding utf-8

    image

    然后再次执行make images编译,编译顺利通过!

    image

    至此大功告成!

    这样后面不管是阅读调试还是定制JDK源码都非常方便了。

    后记:这篇文章在开源项目:https://github.com/hansonwang99/JavaCollection 中也已经收录了,包含自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…


    每天进步一点点

    慢一点才能更快

    展开全文
  • jdk安装后,里面会带有一个src.zip的文件,但文件中没有sun包下的源码,因此需要单独下载。本上传资源JDK源码文件包含sun包下的源码。
  • 绝对良心提供百度网盘的jdk1.8源码下载包含sun包的-附件资源
  • 在官网下载的openjdk15的源码包,解压缩既可以用,这是源码包所以linux、windows都可以用
  • 使用IDEA读JDK源码

    2021-05-23 15:13:34
    建议人手一个,每当心血来潮时、遇到问题时、碰到疑惑时、闲得无聊时都可以打开工程看一看源码,做做笔记和注释。 搭建源码阅读调试环境 ...3、导入JDK源码 有很多小伙伴问JDK的源码在哪里呢? 远在天边,仅...

     

     

    建议人手一个,每当 心血来潮时 、 遇到问题时 、 碰到疑惑时 、 闲得无聊 时都可以打开工程看一看源码,做做笔记和注释。

    搭建源码阅读调试环境

    我个人觉得看源码这个事情还是应该单独搞一个Java工程,源码放里面,测试代码也放里面, 集中调试 , 集中看代码 , 集中写注释 比较方便一些。

    1、创建源码阅读项目

    选择最普通的Java基础项目即可:

    2、创建两个目录

    分别为:

    source
    test

    3、导入JDK源码

    有很多小伙伴问 JDK的源码在哪里呢?

    远在天边,仅在眼前,其实在的 JDK安装目录 下就能找到。

    JDK安装目录下有一个名为 src.zip 压缩包,这正是JDK源码!

    将其解压后拷贝到上面项目的 source 目录下,这样JDK源码就导入好了。

    有些小伙伴会有疑问, 为什么要将JDK源码导一份放到这个项目里? 其实主要原因还是方便我们在源码里阅读、调试、以及做笔记和注释。

    4、调试并运行

    我们可以在 test 目录里去随意编写一段测试代码。

    比如我这里就以 HashMap 为例,在 test 目录下创建一个子目录 hashmap ,然后在里面创建一个测试主入口文件 Test.java ,随意放上一段测试代码:

    public static void main( String[] args )
    {
        Map<String, Double> hashMap = new HashMap<>();
    
        hashMap.put( "k1", 0.1 );
        hashMap.put( "k2", 0.2 );
        hashMap.put( "k3", 0.3 );
        hashMap.put( "k4", 0.4 );
    
        for ( Map.Entry<String, Double> entry : hashMap.entrySet() )
        {
            System.out.println( entry.getKey() + ":" + entry.getValue() );
        }
    }

    不过接下来会有几个问题需要一一去解决。

    问题一:启动调试时Build报错,提示系统资源不足

    解决方法:加大 Build process heap size 。

    设置方法: Preferences --> Build,Execution,Deployment --> Compiler ,将默认 700的数值加大,比如我这里设置为 1700 :

    问题二:想从外层代码F7单步调试进入JDK源码内部,结果发现进不去

    这是因为调试时,JDK源码受保护,一般单步调试不让进,但是可以设置。

    解决方法::

    Preferences --> Build,Execution,Deployment --> Debugger --> Stepping

    问题三:如何对JDK源码做注释?

    调试进入JDK源码以后,发现不能进行注释,每个文件上都有一个小锁的图标,这是因为现在关联的源码并不是我们项目里刚拷进去的源码,而是JDK安装目录下的 src.zip 只读压缩包。

    解决办法:重新关联JDK源码路径为本项目路径下的这一份JDK源码。

    这样一来,我们就可以愉快地对JDK源码调试以及做注释了。

    展开全文
  • Java| 调试JDK源码-附件资源
  • 下载jdk压缩包版就可以,解压后,文件路径中会有一个src.zip文件,这个就是jdk源码。 解压后就可以获得jdk源码啦。建议拷贝后换个路径再解压。如下是我存放的路径 ????导入IDEA ☘️新建java项目 使用默认配置,...

    🍀jdk下载

    本文使用JDK版本为jdk1.8
    在这里插入图片描述

    下载地址:https://www.oracle.com/java/technologies/downloads/archive/

    🍀获取源码

    下载jdk压缩包版就可以,解压后,文件路径中会有一个src.zip文件,这个就是jdk源码。
    在这里插入图片描述
    解压后就可以获得jdk源码啦。建议拷贝后换个路径再解压。如下是我存放的路径
    在这里插入图片描述

    🍀导入IDEA

    ☘️新建java项目

    使用默认配置,选择下一步
    在这里插入图片描述
    勾选从模板创建项目,再选择下一步
    在这里插入图片描述
    选择jdk源码路径,完成创建新项目
    在这里插入图片描述
    导入后显示文件结构
    在这里插入图片描述

    🍀IDEA相关后续配置

    ☘️项目的JDK关联当前src源码

    在这里插入图片描述
    将原来的src.zip替换成现在解压后的版本
    在这里插入图片描述
    在这里插入图片描述
    修改项目使用jdk
    在这里插入图片描述

    ☘️com.sun.tools.javac.api不存在,导入安装jdk路径下的lib

    在这里插入图片描述
    在这里插入图片描述

    ☘️sun.awt.UNIXToolkit和sun.font.FontConfigManager不存在,下载导入openjdk的源码

    新建UNIXToolkit.java和FontConfigManager.java类,注意包名一致。
    在这里插入图片描述
    OpenJDK寻找sun.awt.UNIXToolkitsun.font.FontConfigManager的源码,分别复制到上面新建的两个类里

    下载jdk8u的可以直接使用上面的链接,其他版本可参考下图寻找openjdk源码
    在这里插入图片描述
    复制sun.awt.UNIXToolkitsun.font.FontConfigManager源码替换我们刚刚新建的两个类就可以了。

    配置好应该就也可以开始愉快的学习了。

    🍀测试类

    package com.ber;
    
    import java.util.HashMap;
    
    public class Main {
    
        public static void main(String[] args) {
    	// write your code here
            HashMap hashMap = new HashMap<>();
            hashMap.put("k1","v1");
            hashMap.put("k2","v2");
            hashMap.put("k3","v3");
            hashMap.put("k4","v4");
            hashMap.put("k5","v5");
            hashMap.get("k2");
        }
    }
    

    在这里插入图片描述
    如图,已成功debug。

    🍀Tips

    博主没有遇到OutOfMemoryError内存溢出错误,如果有小伙伴存在这个错误。可以尝试调大构建项目的内存大小。

    具体设置:Settings—>build,execution,deployment---->compiler---->Build process heap size (Mbytrs)
    在这里插入图片描述

    🍀有小伙伴不想动手配置,上传一份配置好的jdk源码

    源码地址:https://github.com/BerBai/JDK1.8_SourceCode

    展开全文
  • 想要读懂JDK源码,需要在自己电脑上搭建JDK的源码阅读环境,正所谓,工欲善其事,必先利其器。下面演示如何在Mac上结合Idea搭建JDK1.8的源码阅读环境。 新建一个空的Java项目 在Idea中选择File–>New–>...
  • jdk8源码

    2018-09-13 15:18:25
    该压缩包中放的是jdk8的源码包,把该资源导入eclipse中就可看到jdk源码
  • JDK源码环境搭建

    2021-03-11 11:58:15
    本教程是用idea搭建,jdk源码就在jdk安装路径下的src.zip中,解压即可用。第一步:新建项目打开IDEA,按如下步骤新建一个简单Java项目create new project新建一个简单Java项目点击finish后,项目就创建好了第二步:...
  • JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java...
  • JDK1.8源码

    2018-12-11 11:44:50
    资源Jdk 1.8的源码,并将所有的源码移到maven项目中,但移除了其中的sun部分,感觉这部分的已经过时,没有太大的必要去研究学习呢,可以下载下来直接导入IDE中,然后编辑,调试学习源码
  • 搭建JDK源码阅读环境

    多人点赞 2021-04-15 20:22:59
    idea搭建JDK源码阅读环境 源码资源 设置IDEA 导入源码 关联展示 第一章 源码资源 第01节 环境的准备 我使用的环境 1. IDEA 2018.3.5 ULTIMATE 环境 2. JDK8 u221 3. Windows 10 环境 效果图 第02节 处理源...
  • jdk8源码_rt.zip

    2021-12-23 09:58:06
    jdk8目录下的源码不包含rt.jar中的源码,本资源只包含rt.jar包的源码,注意:模块的源码不需要下载,你安装好jdk后,会在${JAVA_HOME}的根目录下找到src.zip,这就是src.jar的源码
  • 一、JDK源码源码导入IDEA前资源准备 在自己安装好的JDK1.8版本目录下,找到src.zip,这个就是源码(没有JDK1.8的自行去官网下载,我的版本是jdk1.8.0_271)。 2.在自己电脑磁盘新建项目目录JDK1.8.0_271_source,...
  • 引入JDK源码学习的Java程序设计实践教学-教育技术学论文 引入JDK源码学习的Java程序设计实践教学 唐大仕 北京大学 信息科学技术学院北京100871 摘要提出在课程中引入JDK源码的学习阐述通过阅读分析重写及应用JDK源码...
  • 以下操作在以下环境中测试通过:idea 2019.3,jdk8源码包一、解压源码压缩包从jdk安装目录中找到 src.zip 的源码压缩包,解压后得到源码文件夹二、创建Java项目因主要目的是调试源码,了解其功能的实现过程,所以在...
  • idea查看jdk源码并在源码中写注释

    千次阅读 热门讨论 2020-03-01 19:09:42
    想要查看jdk源码并希望能够写一些注释。以下是一些概要的步骤,以及会遇到的一些问题。 新建一个项目,并将jdk安装目录下的src压缩包解压到项目下并替换原来的src。 需要让debug时自动关联到项目的src中的源码。 ...
  • Harmony 为自己定了两个目标,首先是开发出一个独立并且与现有 JDK 兼容的 Java SE 5 实现,并且以 Apache 软件许可证 2.0 版发行;其次是建立一个开放的模块化运行时架构,包括虚拟机和类库之间及其内部的模块化,...
  • 从零开始搭建一个JDK源码的阅读工程原视频地址1.新建一个java项目1.Create new Project2. next3. 选中创建模板 继续 next4.完成创建项目5.项目效果图2.添加源码2.1找到源码JDK源码存储的位置即你安装JDK的路径。例如...
  • 利用IDEA搭建JDK源码阅读环境教程

    千次阅读 2020-03-26 13:07:28
    利用IDEA搭建JDK源码阅读环境教程——源码面前没有秘密!
  • jdk1.8 sun源码

    2018-09-13 16:46:29
    由于默认JDK不包含全部SUN的源码,这个网上找了半天才找到。本来想免费的无奈scdn必须设置资源分数最小是1
  • JDK源码学习手册(一)

    万次阅读 2018-08-30 11:35:26
    JDK源码学习(准备篇) 本文为菜鸟整理文章,在学习过程中根据自己的学习过程和逻辑点将现有知识进行整合,本人玻璃心小女子一枚,新手上路,可以接收指教,但不接受指点,谢谢! 准备篇包含以下内容 1.jdk...
  • 如何使用Jdk查看源码

    千次阅读 2020-07-26 19:06:51
    你好,我是刚毕业的学生,想学习Java开发,但是不知道JDK用哪个版本好呢,怎么查看sdk源码呢? 今天有小伙伴问我java开发用哪个版本的jdk比较好,作为一个jdk使用了8-9年的老开发来说,甚至jdk的重要,当然很清楚...
  • 前言并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++...但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,016
精华内容 37,206
关键字:

jdk的源码资源