2010-12-16 3 views
8

यह प्रश्न HotSpot generations पर दायरे में सीमित है। प्रोग्रामिंग के लिए कोई तरीका है कि किस पीढ़ी में एक विशेष उदाहरण रहता है। डेटा जैसे:क्या मैं प्रोग्रामेटिक रूप से पता लगा सकता हूं कि जीसी पीढ़ी एक उदाहरण कहाँ रहता है?

  • युवा या पुरानी पीढ़ी?
  • यदि युवा, जो उत्तरजीवी अंतरिक्ष है?
  • टीएलबी के अंदर? कौन सा धागा? (उदा।, BTrace, JVMTI)

कोई भी तकनीक इतने लंबे समय से काम करता है मैं इस तरह कुछ कर सकते हैं के रूप में:

Object x = new Object(); 
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x); 

Beggars चयनकर्ताओं के नहीं किया जा सकता लेकिन आदर्श मैं भी जब के कहने सीख सकते हैं ब्याज पल में एक और एक पीढ़ी से ले जाया जा रहा था यह (यानी, घटना कॉलबैक आधारित। - देरी & भूमि के ऊपर मतदान में निहित में कोई दिलचस्पी नहीं) होता है

जवाब में रुचि नहीं है जो सिर्फ औचित्य के बिना "नहीं" कहता है :)

+1

मुझे उत्सुकता है कि आपको इसमें रुचि क्यों होगी। पाठ्यक्रम की शुद्ध जिज्ञासा के अलावा :) – drekka

+0

शायद यह नहीं किया जा सकता है क्योंकि ए) यह संसाधनों को और अधिक महंगा बना देगा, और बी) इसे करने के लिए किसी को भी अच्छा उपयोग नहीं मिला है। शायद आपके पास अच्छा उपयोग है, और इसे प्रकट कर सकते हैं? –

+0

यदि कोई gen0 संग्रह निष्पादित करता है तो यह संकेत मिलता है कि सभी जीवित वस्तुएं gen1 या उच्चतर हैं, और एक gen1 या gen2 संग्रह का तात्पर्य है कि सभी जीवित वस्तुएं gen2 या उच्चतर हैं, और यदि सिस्टम प्रत्येक ऑब्जेक्ट के लिए कुछ झंडे रखता है यह दर्शाता है कि कोई gen0 या gen1 संग्रह ऑब्जेक्ट को अंतिम बार संशोधित करने के बाद से किया गया है, सिस्टम को gen0 या gen1 संग्रह करने के दौरान पता चल सकता है कि ऑब्जेक्ट में कोई gen0 या gen1 संदर्भ नहीं है। एक बहुत ही उपयोगी अनुकूलन। – supercat

उत्तर

4

जहां तक ​​मुझे पता है, आप सीधे यह नहीं पूछ सकते कि कौन सा मेमोरी पूल वर्तमान में एक ऑब्जेक्ट में रहता है। हालांकि, ऑब्जेक्ट्स को कचरा संग्रह चलाने के द्वारा एक अलग मेमोरी पूल में पदोन्नत किया जाता है, और वीएमएम जेएमएक्स का उपयोग शुरू करने के बाद से आप प्रमुख/मामूली जीसी रनों की संख्या से पूछ सकते हैं। यदि आप ऑब्जेक्ट बनने पर इन काउंटरों को अतिरिक्त रूप से नोट करते हैं, तो आप पुनर्निर्माण कर सकते हैं कि ऑब्जेक्ट किस पूल में रहता है उसके बाद से जीसी था।

3

"जीसी की संख्या की गणना करने के लिए एक अतिरिक्त जटिलता है ऑब्जेक्ट बनाया गया था "दृष्टिकोण - यह समयपूर्व ऑब्जेक्ट पदोन्नति पर ध्यान नहीं देता है।

यदि उत्तरजीवी रिक्त स्थान मूल रूप से बहुत छोटे होते हैं, और ईडन से स्मृति दबाव (यानि कम से कम एक बार जीवित वस्तुओं की दर) उच्च है, तो ऑब्जेक्ट को पूर्ण कार्यकाल सीमा पर पहुंचने से पहले कार्यकाल में पदोन्नत किया जाएगा।

वास्तविक उदाहरणों में, स्वस्थ अनुप्रयोगों में आमतौर पर समयपूर्व पदोन्नति के गैर-शून्य प्रतिशत होंगे। वास्तव में, 0% समयपूर्व पदोन्नति दर वास्तव में एक बुरा संकेत है - यह कहता है कि आपके उत्तरजीवी रिक्त स्थान बहुत अधिक हैं, और बहुत अधिक स्मृति बर्बाद कर रहे हैं।

संबंधित मुद्दे

 संबंधित मुद्दे