使用Spring boot和javafx会消耗大量内存吗?

2023-12-19

我愿意在我的 JavaFX 应用程序中使用 Spring boot 技术(以获得其依赖注入的优势),但我想知道对内存的影响,因为你知道任何带有“组件”符号的类都会被加载到 MetaSpace(因为 Spring boot 会从中创建一个静态对象),因此,将数十个 JavaFx 视图控制器加载到 MetaSpace 中,从应用程序启动到结束,它们永远不会被垃圾收集,这显然是一件坏事,有什么办法可以解决这个问题吗?


您在评论中写道:

当视图控制器没有被垃圾收集时,JavaFX 应用程序意味着视图对象将始终保留在那里 TableViews、ListViews、Panes ...这可能会占用一些重要的空间

但我认为不必如此。

引用 Java 节点的控制器实例只是一个 Java 对象,与任何其他对象一样,当 JVM 中不再有对其的引用时,该实例将可用于垃圾回收。

假设您像这样配置 JavaFX SpringBoot 集成:

  • 在 JavaFX 中添加 Spring 依赖注入(JPA Repo、服务) https://stackoverflow.com/questions/57887944/adding-spring-dependency-injection-in-javafx-jpa-repo-service

因此,您将控制器工厂配置为使用 Spring beans:

fxmlLoader.setControllerFactory(
    springContext::getBean
);

那么你的控制器就是你可以控制其范围的Spring bean。

如果你使用原型范围 https://www.baeldung.com/spring-bean-scopes#prototype:

@Bean
@Scope("prototype")
public PersonController personControllerPrototype() {
    return new PersonController();
}

那么行为如下:

  • 关于Spring bean容器中的范围和垃圾收集 https://stackoverflow.com/questions/8419073/regarding-the-scope-and-garbage-collection-in-spring-bean-container

Spring 不管理原型 bean 的完整生命周期:容器实例化、配置或以其他方式组装原型对象,并将其交给客户端,而不会进一步记录该原型实例。

通常,您将创建一个控制器并添加对其实例化到场景图中的对象树的引用。如果您在导航时替换场景图中的树,并且不在任何地方保留对控制器的引用,则控制器和已从场景图中删除的任何其他关联节点都可以被垃圾收集。

或者,如果您只想加载一次 fxml 并永远保留控制器,您可以使用单例作用域来做到这一点。

因此,基本上,您可以选择最适合您的应用程序或您正在使用的单个控制器的控制器的范围和生命周期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Spring boot和javafx会消耗大量内存吗? 的相关文章

随机推荐

  • 具有多个条件的 if 的执行顺序

    在具有多个条件的 if 语句中 如果第一个条件的结果明确 是否会执行第二个条件 example if i gt 0 array i 0 如果我交换条件 i 的负值可能会发生段错误 但这样就不会发生段错误 我可以确定这总是有效还是必须使用嵌套
  • groovy.json.JsonException:期待“}”或“,”但获得当前字符

    我正在尝试让一段代码为我工作 但运气不佳 所以我把代码分解成这个让我悲伤的小片段 任何人都可以帮助确定为什么会发生这个错误 import groovy json JsonSlurper String index accessCode d20
  • Firestore - 创建集合的副本

    所以我有一个名为 草稿 的集合 其中包含多个文档 每个文档都有一个自动 ID 每个文档包含字段 名称 和 详细信息 每个文档都显示在 nameLabel 和 detailsLabel 下的 tableViewCell 中 我想做的是 当用户
  • 如何更改android中EditText提示的字体?

    正如我在问题中提到的 我正在尝试更改 EditText 中提示的字体 但我似乎无法实现它 这是我的 EditText 获取用户名的代码
  • 重新计算风格:为什么这么口吃?

    假设我们有一段代码将一系列相似的元素注入到 DOM 中 像这样的东西 var COUNT 10000 elements Object keys Array COUNT join split var d document root d get
  • AS3 最大文本字段宽度

    如何设置Textfield的最大宽度 我需要自动调整宽度 直到达到最大宽度 因此长文本会断行 var maxWidth Number 200 textField multiline false textField wordWrap fals
  • devicePixelRatio可以小于1吗

    由于某种原因 任何小于 1 的像素比值在我的渲染算法中都不起作用 值 0 没有意义 但 0 5 则有意义 有没有可能devicePixelRatio返回 0 到 1 之间的值 如果您将浏览器缩放设置为小于 100 则 DPR 可能小于 1
  • 制作(从源代码安装)python 而不运行测试

    我从源码 tar 编译 python 一切正常 但测试运行了 2 小时和两次 如何绕过这些测试 0 16 20 178 405 test inspect 0 16 26 179 405 test int 0 16 27 180 405 te
  • 如何在 tvOS 中打开 GameCenter

    如何在 tvOS 中打开游戏中心排行榜 我已将此代码用于我的 iPhone 游戏 排行榜标识符 在 tvOS 上不可用 我计划在 AppleTV 上使用相同的排行榜 这将是同一个游戏 非常感谢您的帮助 斯特凡 IBAction func h
  • xsl 在 xml 中定义

    我在 movie xml 中的前几行如下
  • 当子文件夹具有相同名称时,Airflow Packaged Dags(压缩)会发生冲突

    我们正在建立一个 Airflow 框架 多个数据科学家团队可以在其中协调他们的数据处理管道 我们开发了一个 Python 代码库来帮助他们实现 DAG 其中包括各种包和模块中的函数和类 还有 Operator 子类 每个团队都会将自己的 D
  • 语言验证消息

    我在用ASP NET MVC 5 我正在尝试获取消息ValidationMessageFor法语 xxx 字段为必填项 gt Le champ xxx est manquant 我已经在两台服务器上部署了我的网站 Windows Serve
  • 如何检测和调试多线程问题?

    这是后续这个问题 https stackoverflow com questions 493311 how to write safe correct multi threaded code in net 我在这一点上没有得到任何意见 这是
  • 使用 websocket 处理连接丢失

    我最近设置了一个工作正常的本地 WebSocket 服务器 但是我在理解应该如何处理客户端或服务器都不是故意启动的连接突然丢失时遇到了一些麻烦 即 服务器断电 以太网电缆拔出等 我需要客户端知道连接是否在 10 秒内丢失 客户端 连接很简单
  • 如何将h1和h2写在同一行?

    我有一个页面 我只想制作一个标题 该标头是一个 h1 文本左对齐 并且 h2 右对齐 在同一行 在它们之后 hr 到目前为止 我的代码如下所示 如果您测试它 您会发现它是错误的 h1 align left Title h1 h2 align
  • 如何以整数形式反转 RGB 颜色?

    给定 32 位无符号整数形式的 RGB 颜色 例如 0xFF00FF 如何反转它 获得负颜色 而不使用位移操作提取其各个分量 我想知道是否可以仅使用按位运算 AND OR XOR 更准确地说 使用最少指令数的算法是什么 我觉得就是这么简单
  • 如何从 JSESSIONID 加载 Java HttpSession?

    我想获得JavaHttpSession通过 JSESSIONID 是否可以 如果是 怎么办 您基本上需要手动将它们全部收集在一个Map https docs oracle com en java javase 17 docs api jav
  • android应用程序可以检查手机的版本吗

    我想编写一个使用动态壁纸的应用程序 仅版本 7 及更高版本支持此功能 应用程序是否可以检查 Android 手机的版本 并根据版本运行不同的代码 例如使用动态壁纸或静态背景 你有一个代码示例吗 这需要特殊权限吗 假设您需要 Android
  • 使用pauseOnConnect 通过 https 传递连接

    我正在使用pauseOnConnect选项开启net createServer 允许我将连接传递给我使用集群创建的工作人员 server net createServer pauseOnConnect true function conne
  • 使用Spring boot和javafx会消耗大量内存吗?

    我愿意在我的 JavaFX 应用程序中使用 Spring boot 技术 以获得其依赖注入的优势 但我想知道对内存的影响 因为你知道任何带有 组件 符号的类都会被加载到 MetaSpace 因为 Spring boot 会从中创建一个静态对