gpt4 book ai didi

java - 是否有技术原因可以避免在大型 Java 项目中创建高度困惑的包依赖关系?

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:31 25 4
gpt4 key购买 nike

我是现代 Java 编译器和虚拟机的新手,所以我很好奇大型 Java 项目(5000 多个相当大的类)在编译期间和运行时会遇到哪些技术问题,因为包依赖关系越来越棘手?

在大型 C++ 项目中,如果您远离大型项目中的非循环库(或包)依赖关系图,您可能会陷入技术麻烦(撇开所有可维护性问题不谈)。

一些例子

  • 如果包含大部分源代码树,编译可能会耗尽内存
  • 如果包含太多对象存档,也可以链接(对象存档通常与 C++ 项目中的包相关)

内联模板实例化大大加剧了这个问题。现代工作站无法编译和链接在构建的任一阶段将 5000 个相当大的类中的大部分集中在一起的项目。

我问过的 Java 开发人员不认为技术限制是避免循环包依赖的理由(其他动机适用)。有吗?

最佳答案

  1. Java 编译器 (javac) 不会同时编译所有类,而是一个一个地动态发现未编译或陈旧的 .class文件。

  2. 没有链接。相反,所有 .class 文件在编译后都打包在一个 jar 文件中。这基本上是 ZIP 压缩,甚至不需要此步骤。

  3. 由于简单的语言语法和语义,Java 编译器相当简单。没有太多的元编程、类型推断等。例如,Scala 编译器要慢得多,因为语言本身要复杂得多。

话虽这么说,但我找不到编译大型、复杂项目的任何技术限制。显然构建时间会增加,一旦超过 10 分钟就会变得很痛苦,但这并不是真正的问题。

真正的问题 困惑、循环、交叉引用是源代码的可维护性。主要是重构代码要困难得多。一旦项目达到一定规模(5000 多个类可能约为 50 万行代码),开发人员将尝试将其拆分成多个部分。提取库、模块和层。如果依赖性如此之强,这个过程几乎是不可能的。

关于java - 是否有技术原因可以避免在大型 Java 项目中创建高度困惑的包依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com