
jdk
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏。
从一个BUG说起前段时间翻到了一个 JDK 有点意思的 BUG,带大家一起瞅瞅。https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8137185memory leak,内存泄漏。是谁导致的内存泄漏呢?ConcurrentLinkedQueue,这个队列。这个 BUG 里面说,在 jetty 项目里面也爆出了这个 BUG:我看了一下,觉得 jetty 的这个写的挺有意思的。我按照 jetty 的这个讲吧,反正都转载 2020-08-11 21:19:14 · 221 阅读 · 0 评论 -
研究了 2 天,终于知道 JDK 8 默认 GC 收集器了!
JDK 8 到底默认用的是哪款 GC 收集器?为啥是 JDK8?不是 9 也不是 10?因为 JDK8 还是市场占有率最高的,所以针对这个版本我做了深入的探索。《深入理解 Java 虚拟机》第三版第 128 页中提到 JDK 9 之前,Server 默认使用 Parallel Scavenge + Serial Old(PS MarkSweep),那么真的是这样的吗?我带着这个疑问做了如下验证 直接使用命令查看一下当前 JVM 默认参数 java-XX:+PrintComman...转载 2020-06-03 13:41:35 · 656 阅读 · 0 评论 -
Oracle JDK 和 OpenJDK 有什么区别?
OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。Oracle JDK采用了商业实现,而OpenJDK使用的是开源的FreeType。当然,“相同”是建立在两者共有的组件基础上的,Oracle JDK中还会存在一些Open JDK没...转载 2020-03-04 21:52:35 · 466 阅读 · 0 评论 -
JDK ShutdownHook - 优雅地停止服务
一、什么是ShutdownHook?在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源、平滑退出的功能。 使用Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1. 程序正常退出 2. 使用System.exit() 3. 终端使用Ctrl+C触发的中断 4. 系统关闭 5. ...原创 2018-11-06 10:38:30 · 3673 阅读 · 0 评论 -
如何实现一个Java Class解析器
最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功能已经完成,还有一些细节功能日后再增加。实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路。 Class文件作为类或者接口信息的载体,每个Class文件都完整的定...转载 2017-05-23 20:54:55 · 451 阅读 · 0 评论 -
科普:String hashCode 方法为什么选择数字31作为乘子
1. 背景某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。这个数字居然不是用常量声明的,所以没法从字面意思上推断这个数字的用途。后来带着疑问和好奇心,到网上去找资料查询一下。在看完资料后,默默的感叹了一句,原来是这样啊。那么到底是哪样呢?在接下来章...转载 2018-11-13 11:21:45 · 325 阅读 · 0 评论 -
【手写系列】纯手写实现JDK动态代理
前言在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架。JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充。本篇博客将涉及2个话题:第一,JDK动态代理的实现原理,带你探索动态代理的实质面目;第二,自己动手写代码去实现JDK动态代理,去创造世界! JDK动态代理先写一个例子,感性认识下动态代理...转载 2018-11-20 08:36:56 · 837 阅读 · 0 评论 -
不止 JDK7 的 HashMap ,JDK8 的 ConcurrentHashMap 也会造成 CPU 100%?原因与解决~
现象大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象,它还可能造成插入的数据丢失,有兴趣的读者可以自行了解下。对于HashMap多线程的问题,我...转载 2019-03-22 09:11:34 · 219 阅读 · 0 评论 -
我逛了一下JDK一条街,发现了不少好东西!
一大早就接到了Oracle的电话,让我十分懵逼。“先生您好,从2019年1月开始, 我们对JDK8的支持已经到期, 不再提供免费的updates和security fix , 如果您还需要的话请付费购买。”“那要是JDK8 有漏洞怎么办?”“请您付费购买服务和支持!”“没有别的办法了?”“您也可以升级到JDK 9 , 10 ,11, 12 .....”“怎么会有这么多的版...转载 2019-04-09 09:46:55 · 1397 阅读 · 0 评论