JPMS:Java 平台模块系统
JPMS 代表 Java 平台模块系统。这是Java 9中的新功能。我们的java应用程序和Java包可以借助Java模块系统打包成Java模块。 Java 模块允许我们指定模块的哪些包和其他 Java 模块应该能够看到。 Java 模块还列出了它运行所需的 Java 模块。
Java 平台系统也称为 Java Jigsaw 或 Project Jigsaw。 Jigsaw 的名字是在其开发时使用的。开发这个的主要目的是让JRE更加模块化。 JPMS 解决了几个主要问题,即 Classpath/JAR Hell、大规模单体 JDK、版本冲突、安全问题。
现在,让我们更深入地研究 Java 平台模块化系统,以了解更多关于它们的信息。
为什么 Java 需要模块?
重要的是要记住,JPMS 是一个 SE(标准版)功能,并且会影响 Java 的各个级别。尽管如此,该补丁的目的是使大多数程序在从 Java 8 切换到 Java 9 时无需修改即可运行。其主要目的是收集模块可见的相关包,同时对模块的外部使用者隐藏一些组件.
JPMS 的推出有以下既定目标 -
轻松组织大型应用程序和库。
提高安全性
提高应用性能
管理小型设备的平台故障。
改进结构。
类路径VS模块路径
迄今为止,类路径一直是程序在 Java 中执行时可访问的内容的主要决定因素。尽管扮演了这个角色并且被清楚地了解,类路径最终变成了一个大的、无差别的桶,所有依赖项都插入其中。
模块路径在类路径之上添加了一个级别。它充当包的存储空间,并选择应用程序可以访问哪些包。
类路径 |
模块路径 |
---|---|
适用于所有 Java 版本 |
仅适用于Java 9及以上版本 |
不需要 module-info.java |
是否需要 module-info.java |
仅当项目没有 module-info.java 时添加库才有效 |
库可以在没有 module-info.java 的情况下工作 |
仅添加非模块化库 |
模块化和非模块化都可以添加 |
封装和抽象较弱 |
封装性和抽象性很强 |
模块化程度较弱 |
模块化很强 |
无法通过将库的一部分添加到类路径中来将其添加到项目 |
我们只能通过将库的所需部分添加到模块路径中来将其添加到项目中 |
JAVA 中的模块
JDK 由模块组成。如果您在系统上使用 JDK,那么您也拥有源代码。如果您不知道这一点,请查看此内容以了解更多信息。
JDK安装目录中有一个/lib目录。在该目录中,您将找到一个 src.zip 文件。然后将其解压缩到 /src 目录中。之后查看 /src 目录并找到 /java.base 目录,然后您将找到 module-info.java 文件,最后打开它。
在顶部的 Javadoc 注释之后,您将找到一个名为 modulesection.base 的文件夹,后面是导出行。该格式有点深奥,所以我们不会太深入。
正如您所看到的,java.base 模块导出了几个众所周知的 Java 包,包括 java.io。这就是收集包的模块的工作原理。
指令的要求与导出相反。因此,所指定的模块可能需要一个模块。指定模块路径的方式与在针对模块运行 Java 编译器时提供类路径的方式相同。这使得解决依赖关系成为可能。
向后兼容性
Java 9 在创建时就考虑到了向后兼容性。不过,新的模块结构是一个重大转变,您可能会遇到问题,特别是在大型代码库中。
以下命令可能对解决源自代码库的问题有用 - 当命令 jdeps 指向一个类时,它将查找任何依赖项以及需要依赖项的模块。
如果您的依赖项导致问题,您可以希望您所依赖的包具有兼容 Java 9 的更新版本来构建。如果没有,您可能需要寻找选项。
常见错误
如何解决java.lang.NoClassDefFoundError -
Javax/xml/bind/JAXBException
这是抱怨找不到分配的类的代码,因为它已迁移到模块而对使用代码不可见。有几种解决方案。
JPMS 是一个相当重大的转变,因此采用需要一些时间。幸运的是,由于 Java 8 是长期支持版本,因此没有迫切需要。
然而,从长远来看,旧项目有必要迁移,而新项目必须明智地使用模块,以便也许获得一些已经给予的好处。
结论
JPMS代表Java Platform Module System,在开发初期也被称为project jigsaw。它使开发人员可以更轻松地组织大型应用程序和库。它改进了结构并提高了平台的安全级别。它还用于提高应用程序性能,并且对于较小设备的平台分解很有用。这背后的主要思想是启用模块可见的相关包的集合,同时对模块上的外部使用者隐藏元素。
以上是JPMS:Java 平台模块系统的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

要正确处理JDBC事务,必须先关闭自动提交模式,再执行多个操作,最后根据结果提交或回滚;1.调用conn.setAutoCommit(false)以开始事务;2.执行多个SQL操作,如INSERT和UPDATE;3.若所有操作成功则调用conn.commit(),若发生异常则调用conn.rollback()确保数据一致性;同时应使用try-with-resources管理资源,妥善处理异常并关闭连接,避免连接泄漏;此外建议使用连接池、设置保存点实现部分回滚,并保持事务尽可能短以提升性能。

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

使用java.time包中的类替代旧的Date和Calendar类;2.通过LocalDate、LocalDateTime和LocalTime获取当前日期时间;3.使用of()方法创建特定日期时间;4.利用plus/minus方法不可变地增减时间;5.使用ZonedDateTime和ZoneId处理时区;6.通过DateTimeFormatter格式化和解析日期字符串;7.必要时通过Instant与旧日期类型兼容;现代Java中日期处理应优先使用java.timeAPI,它提供了清晰、不可变且线

依赖性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推广looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

前形式摄取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

使用性能分析工具定位瓶颈,开发测试阶段用VisualVM或JProfiler,生产环境优先Async-Profiler;2.减少对象创建,复用对象、用StringBuilder替代字符串拼接、选择合适GC策略;3.优化集合使用,根据场景选型并预设初始容量;4.优化并发,使用并发集合、减少锁粒度、合理设置线程池;5.调优JVM参数,设置合理堆大小和低延迟垃圾回收器并启用GC日志;6.代码层面避免反射、用基本类型替代包装类、延迟初始化、使用final和static;7.持续性能测试与监控,结合JMH

Maven是Java项目管理和构建的标准工具,答案在于它通过pom.xml实现项目结构标准化、依赖管理、构建生命周期自动化和插件扩展;1.使用pom.xml定义groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依赖版本与冲突;4.通过多模块项目结构组织大型应用并由父POM统一管理;5.配

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa
