jsf - जेएसएफ 2.2 मेमोरी की खपत: मोजर्रा मेमोरी में पिछले 25 दृश्यों के व्यूस्स्कोड बीन्स क्यों रखते हैं?



jsf-2.2 mojarra (0)

स्मृति प्रति सत्र बढ़ता है

हम Mojarra के साथ JSF 2.2 (2.2.12) का उपयोग कर उच्च स्मृति खपत का अनुभव कर रहे हैं। हमारे लोड परीक्षणों की जांच करने के बाद यह पता चला कि हमारे व्यूस्केक्ड बीन्स में डेटा का आकार काफी अधिक है (कभी-कभी 1 एमबी से अधिक)। वैसे भी - जब नेविगेशन देखने के लिए देखने के लिए, सत्र मेमोरी आकार बढ़ता और बढ़ता रहता है। हम अल्पावधि में सेम में आकार कम नहीं कर सकते, इसलिए इस व्यवहार ने कुछ प्रभाव छोड़ दिया है।

समाधान 1 - संदर्भ पैरामीटर बदलना (काम नहीं कर रहा है)

अब - हमने मोजर्रा से आधिकारिक संदर्भ पैरामीटर के साथ खेला है जो डिफ़ॉल्ट रूप से 15 पर सेट है:

com.sun.faces.numberOfLogicalViews
com.sun.faces.numberOfViewsInSession

उन मानकों को कम मान में बदलना हमारे लोड परीक्षणों में स्मृति खपत पर कोई प्रभाव नहीं पड़ा।

समाधान 2 - सक्रिय व्ह्यूमैप्स साइज बदल रहा है (काम कर रहा है)

हम Mojarra डिबग कर रहे थे और ViewScopeManager में निम्नलिखित कोड पाया:

Integer size = (Integer) sessionMap.get(ACTIVE_VIEW_MAPS_SIZE);
if (size == null) {
    size = 25;
}

पिछली बार देखे गए विचारों को रखने के लिए डिफ़ॉल्ट आकार 25 लगता है। यह देखकर हमने एक सत्र लिस्टर को लागू किया है जो इस मान को 1 में सेट करता है:

public class SetActiveViewMapsSizeSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        event.getSession().setAttribute(ViewScopeManager.ACTIVE_VIEW_MAPS_SIZE, 1);
    }
}

यह स्पष्ट रूप से काम किया मेमोरी बंद हो गया क्योंकि केवल 1 दृश्य को रखा गया है।

तो मेमोरी में 25 विचार क्यों?

इसलिए मोजररा स्मृति में 25 दृश्यों का इतिहास रखता है, यदि सत्र में कोई भिन्न मान परिभाषित नहीं किया जाता है। मुझे इसके बारे में कोई दस्तावेज नहीं मिल रहा है। क्या कोई यह समझा सकता है कि इसके लिए क्या है? क्या यह ब्राउज़र बैक के लिए है? हमारे जेएसएफ पृष्ठों पर हमारे पास कैशिंग अक्षम है इसलिए ब्राउज़र वापस हमेशा एक नया दृश्य बना देगा। यह हमारे लिए एक मुद्दा नहीं होना चाहिए।

क्या समाधान 2 एक वैध दृष्टिकोण है? क्या कोई इस दृष्टिकोण की कमियों को समझा सकता है?

अपडेट 1

विभिन्न टिप्पणियों और गहरी डीबगिंग के बाद, यह निकला कि:

  • com.sun.faces.numberOfLogicalViews तर्कसंगत दृश्यमैप आकार को परिभाषित करता है, जो केवल (!) यूआई घटक पेड़ की स्थिति को संग्रहीत करता है
  • com.sun.faces.application.view.activeViewMapsSize , ActiveViewMap के आकार को परिभाषित करता है, जो व्यूस्काइड सेम को धारण करता है

संख्या 1OfLogicalView को 1 में बदलते समय, मोज़ेरा अभी भी पिछले 25 दृश्यों के सभी दृश्यों का पता लगाता है। जब आप इसे दूसरे तरीके से कॉन्फ़िगर करते हैं - activeViewMapsSize दृश्य को 15 और activeViewMapsSize करने के लिए 1- दृश्य को activeViewMapsSize गए डेटा के कारण सही ढंग से नहीं किया जा सकता है I हमें एक अपवाद भी नहीं मिला। मैं समझना चाहूंगा, मोजाररा ने activeViewMapsSize अधिक निर्धारित करने के लिए चुना, वही नहीं, क्योंकि हम अप्रत्याशित व्यवहार के बिना हमारी स्मृति की खपत करना चाहते हैं।

अपडेट 2

हमने Mojarra JAVASERVERFACES-4015 पर एक मुद्दा बनाया





mojarra