[英]Tomcat 8.5 Wildfly 15 Java 8 OutOfMemoryError and very slow startup
啟用后@Autowrid
800 ManegedBeans春天,900個服務,1000:,Maven項目與Spring 4,在大約@Component
和1000 @Repository
,啟動應用程序trhow一個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();
}
在方法內。 使用局部變量而不是實例可以優化啟動嗎? 給GC帶來一些好處? 調用applicationContext.getBean(AnyService.class)可能會惡化方法的性能嗎?
OutOfMemoryError和啟動緩慢是兩個不同的問題。 我認為您不必刪除@Autowired注釋。
首先,您應該確定哪個bean導致加載緩慢(例如db連接),並在該類中添加@Lazy,您可以參考本文spring-lazy-annotation-use-cases 。 並且應該先加載一些bean 確保首先初始化特定的bean
其次,使用Spring XML配置代替組件掃描或限制組件掃描范圍可能會有所幫助。 確保僅使用應用程序的最低要求組件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.