Tomcat 8.5 Wildfly 15 Java 8 OutOfMemoryError и очень медленный запуск - PullRequest
1 голос
/ 17 марта 2019

После включения @Autowrid, проект Maven с Spring 4, приблизительно в 800 ManegedBeans Spring, 900 Services, 1000 @Component и 1000 @Repository, запускается из приложения OutOfMemoryError. Я увеличил параметры -Xms1024m -Xmx4g в Tomcat и Wildfly, в приложение я добавил параметр default-lazy-init = "false" в applicationContext.xml и приложение по высокой цене. Я хотел бы знать, есть ли какое-либо преимущество в удалении

@Autowired 
private AnyService anyService;

из всех классов и используйте

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

в рамках методов. Может ли использование локальной переменной вместо экземпляра оптимизировать запуск? Приносит какую-то пользу ГК? Вызов applicationContext.getBean (AnyService.class) может ухудшить производительность методов?

1 Ответ

0 голосов
/ 14 апреля 2019

OutOfMemoryError и медленный запуск - это два разных вопроса. Я думаю, вам не нужно удалять аннотацию @Autowired.

Сначала вы должны определить, какой компонент вызывает медленную загрузку (например, соединение с БД), и добавить @Lazy для этого класса, вы можете сослаться на эту статью spring-lazy-annotation-use-case * . и какой-то bean-компонент должен загружаться первым Убедитесь, что конкретный bean-компонент инициализируется первым

Во-вторых, может помочь использование конфигурации Spring XML вместо сканирования компонентов или ограничение области сканирования компонентов. Убедитесь, что используются только минимально необходимые компоненты вашего приложения

...