JDK先生最近有点烦

最近点对算法  实验目的:求解最近点对算法,分析该算法的性能。问题定义随机生成点的横、纵坐标值(0-9999),点数可以设置100个,1000个,10000个。输出格式:最近点对为( XX , XX )与( YY , YY )以及点对之间的距离。  实验思想使用分治法求解最近点对问题。事先用O(n log n)时间对x坐标进行排序,使得所有的点是按x坐标从小到大排好序的(x坐标相 阅读详情

1

 JDK 先生有点烦

JDK先生有点烦, 因为最近几个刺儿头程序经常找茬儿, 抱怨的还是classpath, jar 文件, package这几个JDK赖以生存、 引以为傲的基础设施。

想当年java诞生的时候, package 帮助程序员把java 类更好地组织起来, jar 文件把class文件打成压缩包,而classpath 这么多年一直兢兢业业地查找类文件,从来没出过差错。 为啥要抱怨他们呢?

前天用户系统跑过来说,他有两个package ,com.foo.db.api.和 com.foo.db.impl,  他期望大家只使用api包的UserDao, 可是总有一些不着调的程序员还去直接使用impl包,  屡禁不止啊。

用户系统带着怨气地问道:   你就没有办法让impl包也变成对外私有的?  你要是再不支持,我们都要转到OGSi 去了啊,到时候你后悔都来不及! 

还有,昨天订票系统跑来说,他有两个模块,模块A 依赖json_1.1.jar,模块B依赖 json_2.0.jar , 可是这两个jar 互不兼容, 怎么把它们放到classpath上?  

JDK 觉得订票系统很变态,怎么会出现这样的代码,这不是自己折磨自己吗? 但转念一想,主要的问题还是自己的classpath, 这个所谓的classpath 是个平铺的线性结构, 而jar 之间的依赖关系应该是个有向图啊!

今天还有个家伙说他要开发物联网应用, 内存受限, 他发现JDK和JRE太大了,动辄上百M, 更要命的是其中有不少东西他们并不用, 例如界面相关的jar , 但是又没法从JDK中去除。  能不能按照需要裁剪一下JDK呢?  

如果说前面两个要求还算合理, 这个老兄的要求简直就是一场革命, JDK自己革自己的命。

2

 模块化

虽然JDK已经非常成熟,但是用户的需求不能置之不理。

JDK闭关思考了半月, 终于憋出来一个大招:做粗粒度的模块化!

他把各位刺儿头招来商议。

“模块化? 还粗粒度? ” 一听到这个消息, 订单系统就跳了起来,生怕把自己给改乱了。

“是啊,模块一般指的是一个独立的单元, 它精确地声明了对外的接口和依赖。 你们想想,人类在开发中基本上都是把jar文件作为一个个的‘模块’, 每个jar文件中包含了一些package ,   但是 jar 文件本质上还是一堆.class文件的压缩而已。”

“那该怎么办?” 用户系统好奇心被激发了,它特别想做package的权限控制。

“最简单的办法,可以在jar包中添加一个声明性的文件, 这个文件定义模块名,它对外提供的接口,和依赖, 像这样:”

0?wx_fmt=png

用户系统很激动, 这简直就是为了他量身定做的: “嗯,这很容易理解, 这个jar 的模块名叫做com.foo.db,  依赖另外一个模块 java.sql ,   这个export 就是说别人只能访问com.foo.db.api这个package下面的类, 像com.foo.db.impl 就不能访问了,对吧?”

0?wx_fmt=png

com.foo.db.jar 文件的内容如下:

module-def.xml

com.foo.db.api.XXXX.class

com.foo.db.api.XXXX.class

......

com.foo.db.impl.XXXX.class

com.foo.db.impl.XXXX.class

......

JDK 赞许地说: “没错,  这就是所谓粗粒度的模块, 原来的java class 也可以称为一个模块,但是粒度太细了, 现在我们把一组类封装到一个jar 文件中,再加一个声明文件, 就变成了一个粗粒度模块。当然你肯定能想到,我自己也得做增强喽, 必须得能识别模块定义,并且正确的设置访问权限。”

用户系统说: “哎呀, 我其实最讨厌又臭又长的xml 了, 能不能用java 描述呢,就叫做module-info.java吧”

0?wx_fmt=png

JDK笑了: “看来你小子想得挺深的。 我也喜欢这样清爽的表达, 只不过得把java 语法也增强了。增加像module , requries, exports这样的关键字才行。”

现在: com.foo.db.jar 文件的内容如下:

module-info.class

com.foo.db.api.XXXX

com.foo.db.api.XXXX

......

com.foo.db.impl.XXXX

com.foo.db.impl.XXXX

......

3

 JDK自身的革命

开发物联网的小伙子问道: “JDK先生, 你自己是不是也要搞成模块化啊 , 这样我就可以裁剪出我使用的模块了。”

“是啊, 你们上层要是模块化了, 我肯定也得这么搞,并且我还得先搞出来, 这样你们好使用啊。这对我来说,是一场巨大的革命啊, 我得把我成千上万的类给捋一捋,形成层次分明,隔离良好的模块, 我现在才总结了一部分: java.desktop , java.xml, java.sql , java.naming, java.logging, java.scripting......”

订单系统打断说: "慢着, 难道让我在每个模块中都导入所有的JDK的基本模块吗? 这不把人给累死?"

0?wx_fmt=png

JDK 说: “不不, 这个问题我也考虑过了,其实可以引入一个隐式的依赖嘛, 我把JDK中最重要的核心模块组织起来,形成一个java.base 模块,其他模块都隐式的依赖它就行了,  就像你的java类不用extend Object 一样, JDK会自动给你加上。”

0?wx_fmt=png

4

 迁移

用户系统说: “ 模块化的想法很不错, 解决了我的问题。 可是现有的大部分程序和jar包都没有实现模块化, 单单自己实现模块化有什么用, 你去require 谁? 你export出去的接口被谁用? ”

大家都向用户系统投来了佩服的目光, 这是个非常现实的问题。

模块化仅仅有JDK的改变还不够, 除非大家都用起来,要不然还是无法实施。

log4j 跳出说: “是啊是啊, 你们都迁移成模块了, 我一直没改,该怎么办?”

JDK说: “ log4j 你不用担心,  肯定得有一种让大家慢慢迁移到‘模块’的路径才行, 就说你吧, 还没有模块化,但是用户系统想拥抱模块化, 他要require你,该怎么办?”

“也许我可以临时的给他们起个名字,例如log4j-module , 可是我的模块怎么才能知道这个'临时模块'的存在呢?” 用户系统说

“想想classpath , 我们可以搞个modulepath, 只要加入到这个modulepath的jar文件,例如log4j.jar ,   就自动认为这是一个module (虽然他没有module-info.java声明) , 这样你就可以requrie log4j  来使用它了。”

0?wx_fmt=png

"妙啊,这可以让大家慢慢的迁移, 我可以先把我的应用转化为模块 , 如果哪个类库还没拥抱模块化, 我就把它放到modulepath中,让它自动成为一个模块, 这样我就可以require了!"

用户系统对JDK的方法非常佩服。

“别高兴的太早”  JDK说, “一个类库一旦成为自动的模快, 那它就能访问所有的模块,因为我们不知道它到底依赖谁, 为了能让大家迁移到模块化,这也算是一个代价吧。 ”

“对了,要是只有JDK实现了模块化, 但是我们上层的应用还没有开始迁移, 能在新的JDK上运行吗? ”   订单系统担忧的问道。

“那必须得运行,不是自夸,我比较牛的一点就是向后兼容性, 早期的代码甚至不用修改就可以在最新的JRE上运行,  新的特性可不能破坏这种兼容性!”

“那该怎么搞? ”


“很简单, 我会把所有这些没有迁移的类库都放置到一个叫做unnamed模块当中, 这样概念上就统一了。 ”

“不错不错, 听起来可行” 大家纷纷表示赞成 “要不试一试?”

“心急吃不了热豆腐, 我今天召集大家来也是把主要的想法给大家分享下, 说起来简单, 里边有很多细节我得好好想想才行, 大家耐心地等待下一个版本的发行吧!”

后记: 本文介绍的就是Java9的新特性: 模块化的一些概念, 还有很多其他的细节,感兴趣的同学可以点击阅读原文去openjdk 的网站上去看看 。 


你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


码农翻身

用故事讲述技术本质

0?wx_fmt=jpeg

微信号:coderising

JDK8升级JDK17过程中遇到的那些坑 JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。 阅读详情

相关推荐

kali切换jdk版本

最近更新了kali系统,把jdk更新到了10.0.2了,,结果导致破解burpsuite的注册机不能用了,不得不切换jdk版本。  由于官网下载jdk很慢(复制链接到迅雷下载快点),所以给出我整理jdk百度云jdk7,8,9,           链接:https://pan.baidu.com/s/14Gz0HQSyVk8yy2EkV5XHfg  提取码:nklg 下载下来解压:    ...

钻石 8298

启动报错没有指定jdk

记录错题 idea启动报错 说某个项目没有指定jdk 解决方式右击项目->open modules sttings-> Module SDK指定jdk 解决

qq_42841340的博客 7999

Java JDK版本全攻略:从JDK 8到JDK 21,一次性把版本升级讲清楚

Java版本演进与升级指南 摘要: 本文系统分析了Java版本演进历程,重点对比了JDK 8/17/21三个LTS版本。数据显示,JDK 17在GC暂停时间、启动速度和内存占用等方面较JDK 8有显著提升(50-100倍GC改进,30%+启动优化)。JDK 21更引入了虚拟线程等革命性特性。文章建议企业尽快从JDK 8升级,并详细说明了JDK 17的新特性(密封类、模式匹配等语言增强,伪随机数、Vector API等核心库升级)及升级注意事项。当前JDK 17是主流LTS选择,而JDK 21则代表未来方向。

yunque_xianguang的博客 1184

最近学习了JDK SPI

JDK SPI是什么 最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了。 所以SPI是什么呢?SPI全称Service Provider Interface,在Java中还是一个比较重要的概念,是Java提供的一套用来被第三方实现或者扩展的API,或者换句话说,SPI是一种服务发现机制。 ...

weixin_30471065的博客 203

基于DBSCAN聚类算法的超像素实时分割

Real-Time Superpixel Segmentation by DBSCAN Clustering Algorithm 摘要 在本文中,我们提出了一种基于密度的带噪声应用空间聚类(DBSCAN)算法的50帧/秒实时图像超像素分割方法。为了降低超像素算法的计算量,我们采用了一种快速的两步框架。在第一个聚类阶段,使用具有颜色相似性和几何约束的DBSCAN算法对像素进行快速聚类,然后在第二个合并阶段,通过颜色和空间特征定义的距离度量,将小簇按其邻域合并为超像素。为了在这两个步骤中获得更好的超像素,定义了

yttt的博客 3493

域自适应的理解与想法(Domain Adaptation)

这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数.

yuanxue18的博客 5982

科普文:软件架构JDK系列之【JDK8升级到JDK17】

JDK8虽然非常好,但是JDK版本已经发布到JDK21了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。下面是一些在升级过程中可能遇到的问题和解决方案:

为无为,事无事,味无味。 2415

纯JS实现SM3加密算法(兼容IE浏览器)

纯JS实现SM3加密,IE、谷歌、火狐等浏览器可以直接使用。

qianpou的博客 7355

最近收集的jdk命名规则

众所周知java的归属公司是sun,而后来sun又被oracle收购了,java的归属权也就随着sun当成了陪礼跟了过去。之间面试的时候被问到了jdk的命名规则,才知道原来jdk也有类似android的代号,而后又搜集了一些关于jdk的相关命名规范,在这里给自己做个总结。 已发行的版本: 版本 名称 发行日期 JDK 1.1.4

ft3049354的专栏 3804

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 375

高通Camera HAL3调试实战:如何用camxoverridesettings.txt高效抓取日志与dump图像数据

本文深入探讨了高通Camera HAL3调试中camxoverridesettings.txt文件的高效应用,重点介绍了如何通过该文件精准控制日志输出级别与dump图像数据,帮助开发者快速定位移动影像系统中的问题。文章详细解析了日志分级配置、图像数据捕获技巧及典型问题排查流程,为高通Camera HAL3项目开发提供了实用技术点。

weixin_30315905的博客 862

【JDK】如何实现jdk1.8与jdk11环境的相互切换

实现jdk1.8与jdk11环境的相互切换

小确幸的博客 6029

BoT-SORT实战:手把手教你实现BoT-SORT训练和测试

文章目录摘要1、数据准备2、配置BoT-SORT环境2.1、获取代码2.2、创建虚拟环境2.3、安装必要的包2.3.1、安装pytorch2.3.2、安装cython2.3.3、安装Cython-bbox2.3.4、安装faiss2.3.5、安装其他的包3、训练3.1、生成REID数据集3.2、预训练模型3.2.1、ByteTrack预训练模型3.2.2、REID预训练模型3.3、开始训练4、如何更改FASTREID的BackBone?5、测试5.1、测试视频5.2、测试摄像头5.3、多类别测试 摘要 Bo

m0_47867638的博客 2298

【新人向】JDK8 还是 JDK21 ?AI时代下,JDK该如何选择 ?

综上,JDK21 是更能适应时代的选择,是更加现代化的选择。尽管现在国内业务大多依旧使用JDK8,但AI化的趋势会让 JDK21 更快地被公司接受,使公司更新。JDK21 一定会是未来的主流版本。我更推荐新人从 JDK21 入门,了解新特性,跟随AI的潮流。但选择从来不是问题,其实可以把所有JDK版本全部下载,然后在学习阶段按需使用,这无疑是更有利于我们学习的。

Muyu1uz的博客 948

LPDDR5 学习笔记01:功能概述

LPDDR5/LPDDR5X SDRAM设备采用8/16DQ通道架构,支持2Gb-32Gb容量。通过CK命令时钟和更快的WCK数据时钟协同工作,7个CA引脚传输控制信息,支持2:1或4:1的WCK:CK比例。设备提供BG/8B/16B三种存储模式选择,分别支持不同数据速率(最高8.533Gbps)和突发长度。采用0.5V VDDQ电源电压,实现高速双倍数据速率传输,并通过差分WCK时钟完成数据采样。读写采用突发访问机制,需先激活命令再执行读写操作。新型LPDDR5X仅支持BG和16B模式,优化了高速性能。

一只豌豆象的博客 2203

【stata基础代码大全 】 可独立完成一篇实证

用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️。八、八.中介效应检验:路径分析(三种方法)第二种方法即Sobel-Goodman检验。*(7)Winsor处理,剔除异常值。六、内生性问题解决方法(附具体模型)其三,工具变量:两阶段最小二乘。第三种方法即Bootstrap检验。二、Stata中数据的基本处理。*(5)生成行业、年度虚拟变量。PSM1————近邻匹配。七、调节效应检验:机制分析。*(2)剔除数据中的样本。*(4)给变量添加标签。*(3)生成新的变量。*(6)基本数据匹配。

J_Giser的博客 8025

电脑上已经有JDK8,想在装一个JDK17

电脑上已经有JDK8,想在装一个JDK17;电脑安装两个JDK版本

weixin_52790331的博客 2813

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深入揭秘 ConcurrentHashMap:JDK7 到 JDK8 并发优化的演进之路

从源码层次剖析 ConcurrentHashMap 的线程安全机制,比较 JDK7 分段锁与 JDK8 CAS+红黑树方案,揭示其扩容、树化与高并发优化的核心原理。

weixin_47762494的博客 3621

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JDK 收费了,怎么应对?难道 JDK 8 一直用下去吗?

推荐几款不错的 JDK 替代品,国产雄起,性能不输国外,下一篇给压测结果。

新质程序猿 1508

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

在Window10或11系统中同时安装 JDK8 和 JDK11

本文指导读者如何从Oracle官网下载并部署JDK8和11,设置JAVA_HOME、JAVA11_HOME和JAVA8_HOME环境变量,以及如何正确配置PATH以确保不同JDK版本间的顺利切换,特别关注了如何避免与Oracle默认路径冲突。

JSUITDLWXL的博客 2016

JDK8升级JDK11过程记录

1、引言 最新版本Java15都出来了,很多小伙伴还在使用Java8,当然JDK15不是长期支持版本,最新的长期支持版本是Java11,而下一个长期支持版本要等到2021年9月发布的Java17。最近把内部几个系统从Java8升级到了Java11,升级过程还是比较简单的。Java11的新特性如下,最兴奋的功能是ZGC,相关资料请其他文档注:以下教程基于Maven配置## 2、准备工作下载openjdk,这里推荐使用华为镜像:https://mirrors.huaweicloud.com/java/jdk/1

励志照亮人生,编程改变命运! 5239

电脑已有jdk,再配置一个jdk

电脑已有jdk1.8,再配置一个jdk12 由于最近跟着教程学习所以需要安装一个jdk12,但是jdk1.8由于需要用在其他项目上也没法删掉,于是配置了两种jdk 下载 这是jdk12 链接:https://pan.baidu.com/s/1rz5yBOi18bAKasC4CDG4WA 提取码:efzl 下载后解压就能用 配置 打开环境变量,找到系统变量中的Path 点击编辑把%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;复制到变量值的最前面,然后确定 新建两个JAVA_

qq_43389032的博客 4761

Java8真的变老!JDK21时代到了。看看朴朴660 个项目从 JDK8 到 JDK21 的零故障升级之路

Java8真的变老!JDK21时代到了。看看朴朴660 个项目从 JDK8 到 JDK21 的零故障升级之路

架构师尼恩 2416

从 JDK 8 到 JDK 17,GC 性能大幅提升

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达 JDK17 发布已经几个月了,其中不仅包含很多新语言功能,而且与旧版 JDK 相比,性能提升也非常明显。与之前 LTS 版本的 JDK 8 和 JDK 11 相比,JDK17 的性能提升尤为明显。此次性能的提升大部分来自 JVM 的新功能和优化,在本文中我们就来重点谈一谈垃圾收集的改进。 最近,我发表过一个演讲,重点介绍了自 JDK 8 以来 G1 中的新特性,本文将在此基础之上进一步扩展,以涵盖 Parallel GC 和

终码一生 1万+

JDK的安装与配置(含配置多个JDK)

对于Java学习者来说,一台电脑拿到手肯定要配置JDK,但是对于新手来说还是容易出错,我也是在安装了好几次之后才熟练,最近已经不满足JDK8了,想要配置多个JDK切换使用,所以写篇文章记录一下,希望也可以帮助到大家! 目录 1.单个JDK的安装与配置(JDK16) 1.1 JDK的安装 1.2 JDK的环境变量配置 1.3 JDK的配置验证 1.4 可能遇到的问题 2.多个JDK的安装与配置,以及切换(JDK8和JDK16) 1.单个JDK的安装与配置(JDK16) ...

m0_59440594的博客 3446

从JDK 8到JDK 17,GC都有哪些进步?

作者 | Stefan Johansson 译者 | 弯月 出品 | 优快云(ID:优快云news) JDK17 发布已经几个月了,其中不仅包含很多新语言功能,而且与旧版 JDK 相比,性能提升也非常明显。与之前 LTS 版本的 JDK 8 和 JDK 11 相比,JDK17 的性能提升尤为明显。此次性能的提升大部分来自 JVM 的新功能和优化,在本文中我们就来重点谈一谈垃圾收集的改进。 最近,我发表过一个演讲,重点介绍了自 JDK 8 以来 G1 中的新特性,本文将在此基础之上进一步扩展,以涵盖 .

优快云资讯 1万+
上一篇: 我们向印度人学习什么?
下一篇: 你的需求是怎么描述的?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值