与JavaFX一起使用Spring Boot会消耗大量内存吗?

 2023-02-17    402  

问题描述

我愿意在Javafx应用程序中使用Spring Boot技术(以获取其依赖性注入的优势),但是我想知道对内存的后果,因为您知道任何具有”组件”符号的类将加载到Metaspace(因为它的弹簧启动将从其创建一个静态对象),因此,使用数十个Javafx视图控制器加载到Metaspace上,他们将永远不会从应用程序启动到末端收集垃圾,显然是一件坏事,有什么方法可以解决这个问题吗?

推荐答案

您在评论中写下:

与JavaFX一起使用Spring Boot会消耗大量内存吗?

javafx应用程序当视图控制器未收集垃圾时,也意味着视图对象始终留在那里桌面视图,listViews,panes …它可能需要一些重要的空间

,但我认为这不需要那样.

引用Java节点的控制器实例只是Java对象,当JVM中没有更多引用时,将用于垃圾收集.

.

假设您将Javafx Springboot集成像这样:

  • 在JPA repo,Service,Service,Service,Service,Service,Service,Service,Service,Service,Service,Service,Service,Service,Service repo,服务)

因此,您将控制器工厂配置为使用弹簧豆:

fxmlLoader.setControllerFactory(
    springContext::getBean
);

然后您的控制器是弹簧豆,您可以控制其范围.

如果您使用原型范围:

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

然后,行为如下指定:

  • 涉及Spring Bean中的范围和垃圾收集容器

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

.

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

或,如果您只想加载一次FXML并将控制器永久保留,则可以使用Singleton范围来执行此操作.

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

以上所述是小编给大家介绍的与JavaFX一起使用Spring Boot会消耗大量内存吗?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34148.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。