में उपकरण का उपयोग करने का सबसे अच्छा तरीका this question के अनुसार, जावा में किसी ऑब्जेक्ट का मेमोरी आकार निर्धारित करने का मानक तरीका java.lang.instrumentation का उपयोग कर है। कुछ शोध के बाद, ऐसा लगता है कि इसे प्राप्त करने के लिए कोई स्कैला विशिष्ट तरीका नहीं है, इसलिए जावा दृष्टिकोण भी यहां लागू होना चाहिए।ऑब्जेक्ट का आकार निर्धारित करें: स्कैला/एसबीटी
दुर्भाग्यवश, जावा पृष्ठभूमि के बिना स्कैला प्रोग्रामर के लिए यह स्कैला में इस तकनीक को अनुकूलित करने के लिए पूरी तरह से सरल नहीं है। मेरे प्रश्न हैं:
प्रश्न 1
वास्तव में क्या यहाँ हो रहा है? मुझे लगता है कि हमें एक अलग जेएआर में ObjectSizeFetcher
जैसी कक्षा क्यों डालना है, यह सुनिश्चित करना है कि यह वास्तविक कार्यक्रम से पहले लोड हो, जहां हम इसका उपयोग करना चाहते हैं। मुझे लगता है कि Premain-Class
प्रविष्टि और पैरामीटर -javaagent:TheJarContainingObjectFetcher.jar
के बिना उपकरण का उपयोग करना संभव नहीं है?
प्रश्न 2
वहाँ एसबीटी में पूरा कार्य प्रवाह को लागू करने के लिए एक सरल तरीका है? वर्तमान में मैं केवल कुछ ही बोझिल समाधान देखता हूं: मुझे पहले एक माध्यमिक एसबीटी परियोजना स्थापित करना है जहां मैं ObjectSizeFetcher
परिभाषित करता हूं और इसे एक जार में पैकेज करता हूं। अब तक मुझे पता नहीं चला कि पैकेजिंग के दौरान JAR में Premain-Class
प्रविष्टि को स्वचालित रूप से कैसे जोड़ना है, इसलिए मुझे इसे मैन्युअल रूप से हल करना होगा। मैं परिणामस्वरूप जेएआर को परियोजना के स्थानीय पुस्तकालयों में जोड़ सकता हूं जहां मैं getObjectSize
का उपयोग करना चाहता हूं। इस परियोजना के लिए अब मुझे fork in run
सक्षम करना होगा और javaOptions in run += "-javaagent:TheJarContainingObjectFetcher.jar"
का उपयोग करना होगा। मौजूदा एसबीटी परियोजना के भीतर उपकरण का त्वरित उपयोग करने के लिए क्या एक और सरल (और कम घुसपैठ) कार्य प्रवाह है? शायद मैं इस माध्यमिक जार को अनावश्यक बनाने के लिए सीधे Premain-Class
के बारे में एसबीटी बता सकता हूं?
प्रश्न 3
आप स्काला में एक वस्तु का स्मृति के उपयोग का मूल्यांकन करने के लिए एक पूरी तरह से अलग तरह से अनुशंसा करते हैं?
में वस्तु लेआउट योजनाओं का विश्लेषण काश एक leaner रास्ता एसबीटी भीतर स्काला के लिए पूरा करने के लिए है कि वहाँ गया था यानी हो सकता है कंसोल आरपीएल .... – matanster