精华内容
下载资源
问答
  • Idea中自定义修改jdk源码

    千次阅读 热门讨论 2019-12-09 17:04:33
    idea中默认使用的jdk源码是jdk开源出的src.zip压缩包中代码,压缩包中不允许修改,所以将该压缩包解压替换即可. 步骤 1. idea中默认引用的jdk源码中选择要替换的先删除. 删除后打开jdk源码,发现这时打开的是id...

    1.环境说明: jdk1.8,idea : 2019.1.3
    前言. 工作中常常需要读jdk源码,有时候想添加自己的一些注释,却发现无法编辑.
    可以采用如下方法在idea工具中添加jdk源码的注释.
    思路: 因为idea中默认使用的jdk源码是jdk开源出的src.zip压缩包中的代码,在Windows中压缩包中的内容是不允许修改的,所以我们只需要将该压缩包解压成有操作权限的文件即可修改. --jdk源码无法编辑是因为windows中压缩文件没有编辑权限.
    步骤 1.
    先删除idea中默认引用的jdk源码的src.zip压缩包…
    在这里插入图片描述
    删除后打开jdk源码,发现这时idea中打开的是idea反编译后的代码,没有源码了.
    在这里插入图片描述
    2.添加解压后的jdk源码:本地解压jdk的src.zip,然后在idea中新增该源码
    在这里插入图片描述
    此时idea中引用的是我解压后代码.
    3.打开jdk源码,尝试编辑文件,弹出提示,选择编辑即可.然后就可以愉快的添加自己的注释了,
    在这里插入图片描述在这里插入图片描述
    4.不过建议
    1.不要删除原有注释.
    2.建议在代码行后面添加注释,不改动代码行数

    展开全文
  • fantastM36 天前简单回答:可以在 agent 中自定义类加载器,避免遵循 Java 类加载器中的双亲委派模型。详细回答:JVM 加载类是按照双亲委派模型来执行的,每个类都会优先委托给父类加载器来加载,当父类加载器无法...

    fantastM

    36 天前

    简单回答:可以在 agent 中自定义类加载器,避免遵循 Java 类加载器中的双亲委派模型。

    详细回答:

    JVM 加载类是按照双亲委派模型来执行的,每个类都会优先委托给父类加载器来加载,当父类加载器无法加载类的时候再由子类加载器来加载,因此在 JVM 中加载的类会有一种层级关系。

    在你的例子中 `ThreadPoolExecutor` 会由 BootStrap ClassLoader 加载,参数 -javaagent 指定的 baselog.jar 包默认会由 System ClassLoader 加载,所以你一开始描述的问题原因是:`ThreadPoolExecutor` 类在被 BootStrap ClassLoader 加载之后链接的时候,无法找到需要被 System ClassLoader 加载的 baselog.jar 包里的 `MDCInheritableThreadLocal`。(注意这个问题是发生在链接阶段,这也是 JVM 为什么抛了 `NoClassDefFoundError` 而不是 `ClassNotFoundException` 的原因)

    然后你将 baselog.jar 包指定为由 BootStrap ClassLoader 加载,这样的话,`ThreadPoolExecutor` 类在被 BootStrap ClassLoader 加载、链接、初始化的时候,就可以找到同样是被 BootStrap ClassLoader 加载的 `MDCInheritableThreadLocal` 了。

    你在 #7 里说的事情,我理解为是你在 baselog.jar 包里用到了「项目中的引入的 jar 」(可能是 Spring 之类的吧),这部分包不由是 BootStrap ClassLoader 加载的,可能是 System ClassLoader,也可能是 Tomcat 的 Webapp ClassLoader,所以自然也会有 `ClassNotFoundException` 的问题。解决方案的话,我不建议把这类包也指定为由 BootStrap ClassLoader 来加载,更好的解决方案是自定义类加载机制,破坏一下 Java 类加载器中的双亲委派模型。

    具体实现的话,可以借鉴一些分布式追踪 APM 系统,它们在采集应用的数据时候,使用的无侵入式方案也是 javaagent,也会对项目中的一些代码做改造。

    一些可供查阅的资料:

    https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

    https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html

    展开全文
  • 为了方便学习JDK源码,我们首先需要搭建环境,可以对JDK源码进行修改,添加注释等操作。 Step1:创建项目 打开IDEA,创建一个普通的Java工程,选择好JDK。 Step2:导入源码 由于我们创建项目时选择了JDK8...

    简介

    在项目开发中,查看jdk源码时是只允许读,无法修改或者加注释的。为了方便学习JDK源码,我们首先需要搭建环境,可以对JDK源码进行修改,添加注释等操作。

    Step1:创建项目

    打开IDEA,创建一个普通的Java工程,选择好JDK。

    Step2:导入源码

    由于我们创建项目时选择了JDK8版本,因此会自动配置好代码之间的依赖,我们需要做的就是将源码导入项目。

    JDK的源码位于JDK文件夹下的src压缩包里。

    打开新建的项目所在目录

    将src压缩包解压到项目的src目录下

    环境构建完成,接下来便可开始JDK源码阅读之旅!

     

     

    展开全文
  • 本教程是用idea搭建,jdk源码就在jdk安装路径下的src.zip中,解压即可用。第一步:新建项目打开IDEA,按如下步骤新建一个简单Java项目create new project新建一个简单Java项目点击finish后,项目就创建好了第二步:...

    本教程是用idea搭建,jdk源码就在jdk安装路径下的src.zip中,解压即可用。

    第一步:新建项目

    打开IDEA,按如下步骤新建一个简单Java项目

    create new project

    deed13df3543cc3eb537f7769777fcd6.png

    新建一个简单Java项目

    d0413444e808b14bd951bdcafd59baf8.png

    987ad801e141fe71e637620225948304.png

    点击finish后,项目就创建好了

    614ceb07600e8d01095a0b4b349418d7.png

    第二步:添加源码

    将之前解压的src.zip复制到工程目录下

    122eb343626772e16c23bb11e6df99bd.png

    第三步:替换JDK关联

    为了能够备注以及避免修改到其他项目所使用的内容,添加一个名为“JavaJDK1.8Funyard”的SDK

    并将Sourcepath修改为当前项目src下的源码内容

    移除Sourcepath中关联的src.zip

    6a5c63582ce614f223b430939ba4f366.png

    将项目中的JDK源码关联到Sourcepath

    8e93d000c6821878046aa89849ea3f33.png

    53981fd036aa5464994986abfc36f692.png

    修改项目使用的JDK为上面新建的

    7b4c4effa36fe64d2feffff8dd1d0d25.png

    第四步:解决系统资源不足(OutOfMemoryError)

    依次点击File–>Settings–>Build,Execution,Deployment–>Compiler

    堆大小可由原来的700改为1700

    bfdd5010e48c4effcd74d72562ab316c.png

    第五步:解决Debugger断点进入不了下一层

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pj72YmKR-1586181006241)(C:UsersliuweiAppDataRoamingTyporatypora-user-images1586180987620.png)]

    第六步:解决com.sun.tools.javac.api不存在

    将jdk安装目录下(不是自己新建的这个源码阅读工程)lib包添加到项目中

    依然是Projuect Structure

    c110ddeb32e22c63673ca61de811892a.png

    0ced7d42c9395246d878cb117fa4fc5d.png

    dbf8be5e49baf1b2355f3ac9d5ea08d5.png

    点击ok,完成

    7cd2c1b96e4df96adcafa55d753fe0a3.png

    第七步:解决找不到sun.awt.UNIXToolkit和sun.font.FontConfigManager

    在项目中新建sun.awt包和sun.font包,分别新建UNIXToolkit.java和FontConfigManager.java

    89e9cbe6bb7fe4dd55641f23996b3bd3.png

    dc4a80cf195800b4c2254a618f37164e.png

    选择对应版本jdk

    669f0785c5edbcab09043ddb022e5c56.png

    029d2db5ac54bf5a854a60024b2136c7.png

    寻找UNIXToolkit类

    de844c5e003d7d9060f1921b6b89356c.png

    5c0e7e172f5e3261f45e91badb7144ed.png

    进入到 /src/solaris/classes/sun/awt/目录,找到UNIXToolkit

    815f78364d660a95113a181e0ff96a80.png

    FontConfigManager也是一样,路径:src/solaris/classes/sun/font/FontConfigManager.java

    复制进去之后可以看到还是有错误的地方,这时候就要进行清理idea缓存然后重启:

    点击左上角File->Invalidate Caches/Restart…

    250673e5129a23ba21842c0b82bdcd1d.png

    重启之后就可以顺利运行啦(上面新建的类中可能还会报error,但是对使用没有影响)

    展开全文
  • 搬运,侵删原链接:利用IDEA搭建JDK源码阅读环境教程(手动创建版)。找到源码位置在安装JDK的位置找到src.zip和javafx-src.zip,解压如果忘了,可以在IDEA中找到目录(Projuect Structure)IDEA搭建第一步:新建项目...
  • } } Thread.interrupt():修改中断状态,以实现合理、安全的中断当前线程 stop() 方法也可中断线程,但它是立即终止,会引发一些未知的问题,所以就出现了 interrupt() 方法,用它可实现有条件的终止线程,使得数据...
  • 注意源码版本为JDK1.81.删除1.2remove()在LinkedList中remove()和removeFirst()是相同的在LinkedList中的删除其实就是通过修改上一个节点和指向下一个节点的引用完成的,可以看下面的图片:我们可以看到把node...
  • jdk源码

    2021-03-11 17:21:40
    Serializable 作用 Serializable 不能序列化static以及transient 修饰的属性,因为序列化是对最后一次对象的状态进行序列化,而静态变量属于...readObjectNoData 可以在数据不完全的情况下对反序列化的对象进行修改 r
  • 阅读jdk源码

    万次阅读 2018-02-06 16:16:01
    1.首先介绍下如何导入jdk源码,需要下载jdk(不是jre),jdk包中会有一个src.zip,这个就是源码包 2.用idea新建一个普通java项目,把解压后的src所有文件拷到对应idea新建的java项目中,如下图: ...
  • JDK源码环境搭建

    2020-04-06 21:51:21
    本教程是用idea搭建,jdk源码就在jdk安装路径下的src.zip中,解压即可用。 第一步:新建项目 打开IDEA,按如下步骤新建一个简单Java项目 create new project 新建一个简单Java项目 点击finish后,项目就创建好了...
  • 搭建JDK源码阅读环境

    2020-12-04 00:34:27
    搭建JDK源码阅读环境 我们在日常的开发中多多少少都会接触到源码,比如你直接点击HashMap会自动跳到HashMap的源码文件。 但是当你想要深入源码,在阅读源码时给某些逻辑加一些注释时,原有的源码是不支持编辑的。 ...
  • JDK源码学习之String

    2021-04-07 18:49:08
    JDK源码学习之String 文章目录JDK源码学习之String前言一、什么是不可变类 ? 前言 java.lang.String String 是不可变类; 一、什么是不可变类 ? public final class String implements java.io.Serializable, ...
  • JDK源码看StringBuffer

    2018-06-03 16:28:05
    为了提供可修改的操作,引入了 StringBuilder 类,可看前面的文章《从JDK源码看StringBuilder》。但它不是线程安全的,只用在单线程场景下。所以引入了线程安全的 StringBuffer 类,用于多线程场景。 总的来说主要...
  • 1.2 找到JDK源码路径, 我的 路径即为 D:\JAVA\jdk 如果编译的时候报资源不足错误,则需要去配置一下 1.3 更改JDK的默认配置, 即改后可以进行修改和添加注释 2.测试追溯 HashMap 很烧CPU… ...
  • 作为JDK源码中最基础的一个类,分析并总结下它的特点。 目录 源码分析 1、构造方法 2、字符串操作API 3、类型转换API 4、重写的Object方法 5、Java8新增API 源码分析 1、构造方法 说明:一个类的构造器...
  • JDK源码-StringBuffer类

    2019-07-17 08:47:42
    上文我们介绍过JDK源码-StringBuilder类,StringBuffer同StringBuilder类类似,也是为了解决大量拼接字符串时产生很多中间对象问题,但是它和StringBuilder不同的是所有修改数据的方法都加上了synchronized,保证了...
  • StringBuffer类是我们动态操作字符串常用到的类,jdk1.8中StringBuffer继承了父类AbstractStringBuilder类,并且在源码内很多方法都是直接调用的父类AbstractStringBuilder的方法。和 String 类不同的是,...
  • JDK源码学习】String

    2020-04-12 16:22:58
    JDK源码学习】String 如果饿了就吃,困了就睡,渴了就喝,人生就太无趣了 刚刚毕业,发现源码阅读的重要性,开始学习源码!欢迎大佬指正!! 1.介绍 String类使用final关键字修饰,所以不能被继承,也不能被...
  • **上一篇,我们正式提及到String类到不可修改性,所以用String类进行字符串到多次拼接,存在有效率问题。于是在JDK1.0的时候就推出了StringBuffer类,该类是线程安全的。** 1、StringBuffer类的定义 public final...
  • JDK 源码 阅读

    2015-03-19 15:32:49
    持续修改中。。。。 1. StringBuffer 所处类层次 易忽略点: - 这个类是线程安全的。 所有的method直接或间接加synchronized。 所以我们如果是单线程情况下也考虑到这个会不会影响到效率。当然可能JIT可以进行这...
  • 继续分析源码,上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用...
  • JDK源码看StringBuilder

    千次阅读 2018-05-25 08:13:40
    正是因为其不可变,所以也无法进行修改操作,只有不断地 new 出新的 String 对象。 为此 Java 引入了可变字符串变量 StringBuilder 类,它不是线程安全的,只用在单线程场景下。 继承结构 --java.lang.Object...
  • StringBuilder类和StringBuffer类一样,也是我们动态操作字符串常用到的类,jdk1.8中StringBuilder同样继承了父类AbstractStringBuilder类,并且在源码内很多方法都是直接调用的父类AbstractStringBuilder的方法。...
  • JDK源码之HashMap

    2019-09-03 16:39:29
    部分重要属性 //存放key,value的数组 transient Node<K,V>[] table; //存放Entry的set transient Set<Map.Entry<K,V>> entrySet; //hashMap的大小 默认16 ... //修改次数 ...
  • JDK源码之ThreadLocal

    2019-04-01 19:34:00
    ThreadLocal是线程变量,就是说每一个线程都有对应的该变量副本,线程修改该变量时,线程与线程之间的变量是相互隔离的,互相并看不见。这个结构附带在线程上,一个线程可以根据ThreadLocal对象查询到绑定到该线程上...
  • 上文我们介绍过JDK源码学习–String类,该类的内部用了一个char数组表示一个字符串对象的,只是该字符数组被final修饰,初始化之后就不能被修改,但是对于经常做字符串修改操作的情况下,String类就需要不断创建新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,845
精华内容 738
关键字:

修改jdk源码