ठीक है, समस्या का पता लगाया। वास्तव में मेरे कोड में कोई रिकर्सन नहीं था। जावास्क्रिप्ट कार्यों को सैकड़ों तर्कों के साथ कॉल करना संभव है यदि वे "varargs" फ़ंक्शंस हैं उदाहरण के लिए <array>.splice(...)
, जो मेरा अपराधी था।
इसके अलावा: GWT जावा फंक्शन System.arraycopy(...)
जावास्क्रिप्ट स्प्लिस फ़ंक्शन का उपयोग अधिक या कम चालाक तरीके से करते हुए लागू करता है।
splice लक्ष्य सरणी में डालने के लिए इनपुट तत्वों की मनमानी संख्या स्वीकार करता है। कॉल करने
var arguments = [index, howmany].concat(elements);
Arrays.prototype.splice.apply(targetarray, arguments);
यह बराबर है:
targetarray.splice(index, howmany, elements[0], elements[1], elements[2], ...);
तो तत्वों बड़ा हो जाता है (के लिए क्या "बड़ी नीचे देखें यह निम्नलिखित निर्माण का उपयोग करके एक और सरणी से इन इनपुट तत्वों पारित करने के लिए संभव है "विभिन्न ब्राउज़रों के लिए है), आप बिना रिकर्सन के बिना" अधिकतम कॉल स्टैक आकार पार हो गया "त्रुटि प्राप्त कर सकते हैं क्योंकि इसकी सामग्री फ़ंक्शन कॉल के लिए स्टैक पर लोड की जाएगी।,
var elements = new Array();
for (i=0; i<126000; i++) elements[i] = 1;
try {
var arguments = [0, 0].concat(elements);
Array.prototype.splice.apply(elements, arguments);
alert("OK");
} catch (err) {
alert(err.message);
}
इस स्क्रिप्ट का उपयोग करते हुए "बड़ी" का अर्थ है निम्नलिखित:
यहाँ एक छोटी स्क्रिप्ट है कि इस मुद्दे को दर्शाता है
- क्रोम 19: तत्व शामिल हैं ~ 125,000 संख्या
- सफारी 5.1 (विंडोज़ पर): तत्वों में ~ 65,000 संख्या
- फ़ायरफ़ॉक्स 12: तत्वों में ~ 500,000 संख्याएं
शामिल हैं 10
- ओपेरा 11.61: तत्वों में ~ 1,000,000 संख्या
और विजेता है: परिवर्तन के लिए इंटरनेट एक्सप्लोरर 8! यह फ़ंक्शन कॉल विफल होने से पहले, यह सभी सिस्टम मेमोरी का उपयोग कर सकता है।
एक ओर ध्यान दें: फ़ायरफ़ॉक्स और ओपेरा वास्तव में एक अलग (और अधिक उपयोगी) त्रुटि संदेश फेंक: Function.prototype.apply: argArray बहुत बड़ी
+1 रोचक पोस्ट के लिए है – pixelbobby
आप से नहीं समझा गया है आप क्या देख रहे हैं । क्या हुआ है कि आपके पास एक रिकर्सिव फ़ंक्शन है, यानी एक ऐसा फ़ंक्शन जो स्वयं को कॉल करता है (या किसी अन्य फ़ंक्शन को कॉल करता है जो शायद पहले कॉल करता है) शायद दुर्घटना से। – Ben
(संबंधित) http://stackoverflow.com/questions/6602864/stack-and-heap-in-v8-javascript –