Java9的Module机制研究

语言模型与世界模型:从文本预测到物理模拟的AI范式演进 在人工智能领域,模型架构的演进正从处理文本符号关联向理解物理世界动态转变。语言模型通过学习海量文本数据的统计规律,实现了强大的序列预测和生成能力,但其本质仍受限于训练数据的分布,难以进行真正的物理常识推理和长程规划。世界模型则代表了另一种范式,它旨在构建智能体对环境的内部模拟器,通过状态表征和动态预测来理解因果关系,从而支持在不确定环境中的决策与规划。这种从符号关联到物理模拟的转变,为机器人控制、自动驾驶、科学发现等需要与物理世界深度交互的场景提供了新的技术路径。当前,视觉-语言-动作模型和循环状态空间模型 阅读详情

从Java9开始支持了模块化机制,可以按照模块划分功能,总结下来Module有以下优点:

  • JRE可定制化 

   Java9前需要在目标机器上安装完整的JRE环境,JRE是包含运行java程序的所有需要的库,但里面的东西并不是所有应用都需要,通过Module可以为应用量身定制JRE,这大大减少了JRE的大小和运行时内存消耗,如应用只需要依赖java.base模块,那么我们可以定制一个只包含java.base模块的JRE,这样去掉用大量无需用到的类库,整个JRE的运行消耗更少,更轻量化。

 

  • 封装性

      可以导出组件被外部访问,未导出的组件仅模块内部可见,package(包机制)也有访问权限控制,但有一个缺点,包机制可以通过反射等手段绕过。

 

通过实例来学习Module机制的应用

基于module机制的demo

建立一个简单maven quickstart项目,项目结构如下:

App.java 向标准输出打印hello,word

package mone.pkg;

public class App {
    public static void main(String[] args){
        System.out.println("hello,word");
    }
}

module-info.java 这个文件表示该项目是一个模块(module),它描述了这个模块的信息,如 模块依赖哪些其它模块,模块内部的导出类(能够被其它模块访问)等。

module mone.a.b.c{
    requires java.base;
    exports mone.pkg;
}

module关键字声明一个模块域,后面定义这个模块的命名空间。

requires表示依赖的外部模块

exports 该模块导出的包

使用jdk9及以上版本编译它。

javac -d mods /testj9/mone/src/main/java/mone/pkg/App.java /testj9/mone/src/main/java/mone/pkg/module-info.java

运行

java --module-path=/Users/zhangqiang/Documents/temp/testj9/mods/ -m mone.a.b.c/mone.pkg.App

 

  • 将模块打包为jar包

jar -v --create --file=/testj9/mone/mlib/mone.jar --module-version=1.0 -C /testj9/mone/src/main/java/mods . --main-class=mone.pkg.App

和普通java项目打包没有太大区别,--module-version 指定模块版本,--main-class 模块的可执行类

运行jar

java -p /testj9/mone/mlib -m mone.a.b.c/mone.pkg.App

打印jar包内模块的描述信息

jar --describe-module --file=/testj9/mone/mlib/mone.jar

 

  • 定制JRE

定制用于运行特定java应用程序的jre,该jre仅包含java应用依赖的模块,比如定制包含mone.a.b.c的JRE,它仅包含mone模块依赖的模块 java.base,定制的jre更轻量级,更高效,因为它无需加载整个java基础类库。

jlink --module-path /testj9/mone/mlib:mone --add-modules mone.a.b.c --output jreoutput

使用JDK9提供的模块化系统,来定义自己的模块 JDK9提供的模块化系统Java模块化系统的背景模块是什么模块化的目标可靠的配置强封装增强可扩展性能和可维护性可定制的运行环境模块的类型1.具名模块(Named Module)2.无名模块(Unnamed Module)3.自动模块(Automatic Module)查看JDK划分的所有模块如何模块化自己的项目模块相关指令requires 指令exports 和 exports to 指令use 指令provides…with 指令open, opens, opens…to 指令 自从JDK9开始,Java 阅读详情

相关推荐

【项目实战】Java9的新特性模块化(Module)

Java 9引入了模块化系统,称为"Java Platform Module System"(JPMS)这个系统允许将Java程序分成模块,每个模块都有自己的规范,可以明确地声明它依赖于哪些其他模块,并且只能访问被其所依赖的模块暴露的API。这样可以模块化就是增加了更高级别的聚合,是Package的封装体。Package是一些类路径名字的约定,而模块是一个或多个Package组成的封装体。

奶爸的编程之路,也就一周冷个三天 1896

JDK9 - Module

JDK9引入了模块系统,这篇笔记简单介绍了引入module机制的初衷,module的定义、使用与打包。 Overview 没有引入module之前的JDK8项目结构如下,一个项目下的代码按照package进行组织。 引入了module之后的项目结构如下,在package之上还有一个module层次。 为什么引入module? 参考JSR376 以及这篇文章 有如下理由: Reliable configuration,在module之前,JVM通过classpath查找各个类,如果某个类缺失,只有当使用

Focus 1410

SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度

本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。

weixin_29196891的博客 317

JDK 9 模块化系统 (Java Platform Module System) 和 多版本兼容 Jar (Multi-Release Jar)

基本上,您有一个标准的JAR文件,像往常一样,在根目录中包含应用程序中的所有类,在META-INF中还有一个额外的 “versions” 文件夹,其中包含每个额外支持的Java版本的特定实现(在本例中,只有Java 9)。, 那么这个 Jar 就是一个多版本兼容 Jar 了, 在不同的 Java 环境下, 会自动选择合适版本的类. 这里有一个隐藏规范, 就是多个版本的类的 API 需要完全一致, 这个不是必须, 但是建议一致, 不然在使用中可能会出问题。从Java 9开始,还有一种选择。

mrathena 3921

IPD(集成产品开发)管理之道

IPD,是集成产品开发(Integrated Product Development)的缩写,它是集成了众多管理模型和理论、众多企业最佳管理实践的一整套体系,可以帮助企业快速响应市场变化、缩短产品上市时间、减少资源浪费、提高生产力,最终取得商业成功。IPD的思想最早来源于美国PRTM公司出版的《产品及生命周期优化法》一书中,该书详细描述了IPD模式所包含的各个方面。但IPD在中国的普及,源于IBM和华为的推行使用。IPD作为一套先进的产品研发管理模式,其成功的基础是功能部门和各团队之间的密切配合。

钢镚·真的博客 2713

手把手教你用Arduino IDE玩转ESP32-S3-wroom(附串口调试技巧)

本文详细介绍了如何在Arduino IDE环境下配置和使用ESP32-S3-WROOM模块,包括开发环境搭建、硬件连接、程序烧录及高级调试技巧。通过实战步骤和常见问题解决方案,帮助开发者快速上手这一高性能Wi-Fi/蓝牙双模模组,提升物联网开发效率。

weixin_30487201的博客 292

我的代码人生,循环之do while循环

在java中do while循环的特点是,do while循环先执行一次循环内的程序,在进行是否进行循环的判断。 代码: int i=1; while(i<1) { System.out.println("hello,word"); i++; } 这个while是不会有输出结果的,因为设变量i=1,while循环的判断是在i<1的情况下才执行循环里的程序。 再来看...

weixin_45358305的博客 255

AD9361 RSSI配置实战:从寄存器到精准功率测量的避坑指南

本文详细解析了AD9361芯片的RSSI配置实战,从寄存器设置到精准功率测量的全流程避坑指南。通过优化模式选择、测量持续时间及高级参数配置,实现高精度信号强度测量,并分享实际项目中的校准流程与性能优化技巧,帮助工程师提升射频接收链路的测量精度。

weixin_38166557的博客 443

java9 classpath_java9迁移注意事项

序本文主要研究下迁移到java9的一些注意事项。迁移种类1、代码不模块化,先迁移到jdk9上,好利用jdk9的api2、代码同时也模块化迁移几点注意事项不可读类比如sun.security.x509,在java9中归到java.base模块中,但是该模块没有export该package可以通过运行的时候添加--add-exports java.base/sun.security.x509=ALL-...

weixin_29938119的博客 346

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 120

在没有实验数据的情况下,如何高效快速发表高影响因子论文

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

glldxh的博客 371

java9有必要用_java9迁移注意事项

序本文主要研究下迁移到java9的一些注意事项。迁移种类1、代码不模块化,先迁移到jdk9上,好利用jdk9的api2、代码同时也模块化迁移几点注意事项不可读类比如sun.security.x509,在java9中归到java.base模块中,但是该模块没有export该package可以通过运行的时候添加--add-exports java.base/sun.security.x509=ALL-...

weixin_35724999的博客 130

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

java9迁移注意事项

不过模块系统查找模块的时候还是使用模块名来查找(如果module-path里头有多个重名模块,则模块系统知会使用找到的第一个,自动忽略后续的同名模块),版本依赖问题不在模块系统解决范畴内,交由maven之类的依赖管理工具去管理。模块化之后资源文件也收到保护,只能由该模块去访问本模块自身的资源文件,如果需要跨模块访问,也必须借助ModuleLayer找到目标模块,再调用目标模块去加载该模块的资源文件。在设计模块的时候,要尽可能考虑到是否会有循环依赖的问题,如果有则需要重新设计。

WLANQY的博客 721

[VT虚拟化驱动]正式启动VT

文章目录前言一、vmlaunch正式开始虚拟化二、使用步骤1.引入库2.读入数据总结 前言 本章开始真正实现一个最简单的VT框架,当然,只是能跑起来一个VT驱动了,没有并包括EPT,EPT后面再讲 提示:以下是本篇文章正文内容,下面案例可供参考 一、vmlaunch正式开始虚拟化 执行VMLAUNCH指令执行后,就正式进入虚拟化了,再该指令执行之前,得先保存Guest当前的环境,执行完VMLAUNCH后,要恢复Guest的环境,让Guest就像什么都没发生一样,所以需要保存和恢复Guest的各种寄存器的值

吾无法无天的博客 3661

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java 需要转移_java9迁移注意事项

序本文主要研究下迁移到java9的一些注意事项。迁移种类1、代码不模块化,先迁移到jdk9上,好利用jdk9的api2、代码同时也模块化迁移几点注意事项不可读类比如sun.security.x509,在java9中归到java.base模块中,但是该模块没有export该package可以通过运行的时候添加--add-exports java.base/sun.security.x509=ALL-...

weixin_30134531的博客 203

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Soot Java 9模块支持:现代Java程序分析的新挑战与解决方案

Java 9模块化系统(JPMS)为Java生态系统带来了革命性的变化,也给静态分析工具带来了全新的挑战。作为业界领先的**Java优化框架**,Soot通过创新的模块支持机制,为开发者和研究人员提供了完整的Java 9模块分析解决方案。本文将深入探讨Soot如何应对模块化带来的技术挑战,并展示其在实际应用中的强大能力。 ## 模块化时代的Java分析新挑战 🔍 Java 9引入的模块系统彻

gitblog_00819的博客 630

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

JAVA基础面试题:Java中的模块路径(Module Path)与类路径(Class Path)在模块化系统中的交互机制及其对应用部署的影响

本文通过模拟面试的形式,深入探讨了Java中模块路径和类路径的交互机制及其对应用部署的影响。从技术原理到实际应用,Victor的回答展现了扎实的技术功底和系统性思维。希望这篇内容能为读者提供有价值的参考。

Victor_119的博客 1095

JDK9模块化知识和规则入门

要使用Java9模块系统,首先需要理解它。在本教程中,我将向您介绍: 模块的基本定义、内容和配置 Java9中封装的工作原理 如何定义接口 如何列出可用模块 java8和java9应用程序的比较 如何使用模块的基本规则 类路径和模块路径的区别 现在,让我们来认识一下Java语言的新一等公民: Module 。 定义Java9模块 模块是代码、数据和资源的集合。它是一组相关的包和类型(类、抽象类、接口等),包含代码、数据文件和一些静态资源。 例如,模块描述符module-info.ja

weixin_50205273的博客 567

info java module_检测并修复 Java 程序框架的非一致性

引用Ghorbani N, Garcia J, Malek S. Detection and repair of architectural inconsistencies in Java[C]//2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE). IEEE, 2019: 560-571....

weixin_39743603的博客 330

java 迁移问题_java9迁移注意问题总结

序本文主要研究下迁移到java9的一些注意事项。迁移种类1、代码不模块化,先迁移到jdk9上,好利用jdk9的api2、代码同时也模块化迁移几点注意事项不可读类比如sun.security.x509,在java9中归到java.base模块中,但是该模块没有export该package可以通过运行的时候添加--add-exports java.base/sun.security.x509=ALL-...

weixin_30755903的博客 447

java9 opens与exports的区别

序 本文主要研究下java9 opens与exports的区别 open及exports open open module 主要用于解决deep reflection问题,open的作用是表示该模块下的所有的包在runtime都允许deep reflection(包括public及private类型)但是编译时期,仅仅允许该module中...

weixin_34247032的博客 1173
上一篇: Centos8 使用kubeadm部署k8s集群
下一篇: Java线程同步方式记录
IT回忆录
博客等级 码龄16年 42粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值