2012-02-20 138 views
4

我想改善我們戰爭的啓動性能,因爲我們本質上是託管一個基於服務的後端,我們有大約50多場戰爭(每個服務一個)。同時部署所有這些服務有時會導致PermGen,並且重新啓動服務器可能需要很長時間。所以我正試圖評估體系結構(WLS,Spring,Hibernate,CXF)的所有可能性,以提高性能。Spring AOP vs AspectJ啓動性能/內存需求

我們所有的交易都是通過Spring AOP完成的,我們的一些SLA /策略使用了AOP切入點。

我見過一些情況,我們的Spring AOP切入點要麼創建得不好,要麼會導致JUnits到PermGen。看起來大部分啓動時間都是創建切入點和檢索切入點對象(所以我將一些自定義的切入點/攔截器類合併爲一個類和一個Pointcut,這減少了啓動時創建的切入點的數量約30%)。

爲了從編譯時編織中獲得一些好處,是否值得將所有這些轉換爲AspectJ(我以前沒有用過)?這會爲啓動性能以及內存使用提供更好的速度嗎?

我已經看了帖子:

Spring AOP slow startup time

Spring AOP vs AspectJ

而且我絕對單純從方式看,以帶負載斷的啓動和內存的要求,只希望嘗試遷移,如果這是值得的努力。

回答

0

我一直在與這個相同的問題掙扎,並沒有拿出一個很好的答案,但這是我迄今爲止嘗試過的,它可能會爲您節省一些時間。

我正在使用LTW和AspectJ 1.7.1,它爲我的啓動時間增加了大約3秒,我將它與自定義類加載器一起用於tomcat,我將它配置爲只掃描我的代碼,沒有其他包。剩下的我的啓動時間似乎在春天分析我的基於註釋的自動裝配的代碼庫。

08:11:27,878 INFO [DefaultContextLoadTimeWeaver] Using a reflective load-time weaver for class loader: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader 
08:11:30,326 INFO -- the last info printed from the LTW infrastructure 

我有一個非常快速的機器用SSD,如果你的機器是不一樣快,這可能需要更長的時間。

新的AspectJ 1.7作爲LTW加速模式看起來很模糊https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673我沒有使用它,所以我不知道它的工作效果如何。

最快的選擇是將項目轉化爲AspectJ項目,然後由於aspectJ因爲我們正在進行編譯時編織而沒有啓動開銷。我沒有使用這個選項,因爲我沒有打算將aspectJ集成到我的編譯系統中,並且我不想讓它太容易編寫一個方面:)