java - Tomcat 8.5 Wildfly 15 Java 8 OutOfMemoryError 和启动速度非常慢

标签 java spring maven out-of-memory wildfly

启用@Autowrid后,使用Spring 4的Maven项目大约:800个ManegedBeans Spring、900个Services、1000个@Component和1000个@Repository,启动应用程序发生 OutOfMemoryError。 我在Tomcat和Wildfly中增加了参数-Xms1024m -Xmx4g,在应用程序中我在applicationContext.xml中添加了default-lazy-init = "false"参数 并且以巨大的成本应用程序正在启动。我想知道删除是否有任何好处

@Autowired 
private AnyService anyService;

来自所有类并使用

public void execute() {
   AnyService anyService = (AnyService)applicationContext.getBean(AnyService.class);
   anyService.execute();
}

在方法中。 使用局部变量代替实例是否可以优化启动?给GC带来一些好处?调用 applicationContext.getBean(AnyService.class) 可能会降低方法的性能?

最佳答案

OutOfMemoryError 和缓慢启动是两个不同的问题。我认为您不必删除 @Autowired 注释。

首先要确定是哪个bean导致加载缓慢(例如db连接),并在该类上添加@Lazy,可以引用这篇文章spring-lazy-annotation-use-cases 。一些bean应该首先加载Make sure a particular bean gets initialized first

其次,使用 Spring XML 配置而不是组件扫描或限制组件扫描范围可能会有所帮助。确保仅使用应用程序所需的最低组件

关于java - Tomcat 8.5 Wildfly 15 Java 8 OutOfMemoryError 和启动速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55209127/

相关文章:

java - PropertyEditor 未根据 AJAX (JSON) 请求调用

java - Spring MVC中的@Controller注解和 Controller 类

java - Angular 2 : Install external library using npm through Maven

xml - 在 Spring-Boot Intro 之后, "Unable to find a suitable main class, please add a ' mainClass 的属性“

java - Maven javadoc 插件仅修复现有的 javadoc

java - 为什么在 JPA 中使用 "select new"在 POJO 类中放置实体会导致 N+1 问题?

java - h2o 基本解析文件

java - 从 JTable 中检索对象

java - 可观察到像 Lmax Disruptor 这样的批处理

eclipse - Maven 依赖项未部署在 Eclipse Tomcat 实例上