জাভা: শক্তিশালী / নরম / দুর্বল / ভুত রেফারেন্সের মধ্যে পার্থক্য


179

আমি বিষয়টি সম্পর্কে এই নিবন্ধটি পড়েছি , তবে আমি এটি সত্যই বুঝতে পারি না। ধারণাগুলি বর্ণনা করার সময় দয়া করে আমাকে উদাহরণ সহ কিছু পরামর্শ দিন।



4
আমি সেই দস্তাবেজটি পড়েছি, এটি কী পার্থক্যটি কল্পনা করতে আমাকে সহায়তা করে না। (সম্ভবত এটি একটি হার্ড-পঠিত নথি)

14
আপনি যদি সেই নিবন্ধটি পড়েন এবং এখনও বুঝতে না পারেন তবে আপনার এটি সম্পর্কে নির্দিষ্ট প্রশ্ন রয়েছে? "অনুগ্রহ করে আমাকে ফু বুঝিয়ে দিন", "এর উত্তর দেওয়া এখানে কঠিন, আপনি কোন অংশগুলি পান না সে সম্পর্কে নির্দিষ্ট করে ছাড়াই" "আমি এটি পাই না"।
ysavit


শীর্ষস্থানীয় লিঙ্কটি আর বৈধ নয় @
মেহরাজ মালিক

উত্তর:


142

জাভা দুটি ভিন্ন ধরণের / রেফারেন্স অবজেক্টের ক্লাস সরবরাহ করে : শক্তিশালী এবং দুর্বল । দুর্বল রেফারেন্স অবজেক্টগুলিকে আরও নরম এবং ভৌত মধ্যে ভাগ করা যায় ।

  • শক্তিশালী
  • দুর্বল
    • নরম
    • ভূত

আসুন বিন্দু দ্বারা পয়েন্ট।

শক্তিশালী রেফারেন্স অবজেক্ট

StringBuilder builder = new StringBuilder();

এটি রেফারেন্স অবজেক্টের ডিফল্ট টাইপ / শ্রেণি, যদি আলাদাভাবে নির্দিষ্ট না করা হয়: builderএকটি শক্তিশালী রেফারেন্স অবজেক্ট। এই ধরণের রেফারেন্স রেফারেন্সযুক্ত বিষয়টিকে জিসির জন্য যোগ্য নয়। এটি হ'ল যখনই কোনও বস্তুকে শক্তিশালী রেফারেন্স অবজেক্টগুলির একটি শৃঙ্খল দ্বারা রেফারেন্স করা হয় , তখন এটি আবর্জনা সংগ্রহ করা যায় না।

দুর্বল রেফারেন্স অবজেক্ট

WeakReference<StringBuilder> weakBuilder = new WeakReference<StringBuilder>(builder);

দুর্বল রেফারেন্স অবজেক্টগুলি রেফারেন্স অবজেক্টের ডিফল্ট ধরণ / শ্রেণি নয় এবং ব্যবহার করার জন্য তাদের উপরের উদাহরণের মতো স্পষ্টভাবে নির্দিষ্ট করা উচিত। এই জাতীয় রেফারেন্স রেফারেন্স অবজেক্টকে জিসির জন্য যোগ্য করে তোলে। এটি হ'ল, StringBuilderমেমরির ক্ষেত্রে অবজেক্টের কেবল একমাত্র রেফারেন্সের ক্ষেত্রে , দুর্বল রেফারেন্সটি, তবে জিসিকে StringBuilderঅবজেক্টটি সংগ্রহ করার অনুমতি দেওয়া হয় । যখন স্মৃতিতে কোনও বস্তু কেবল দুর্বল রেফারেন্স অবজেক্টগুলির মাধ্যমে পৌঁছানো যায়, তখন এটি স্বয়ংক্রিয়ভাবে জিসির জন্য যোগ্য হয়ে ওঠে।

দুর্বলতার স্তর

দু'টি ভিন্ন স্তরের দুর্বলতা তালিকাভুক্ত করা যেতে পারে: নরম এবং ভুত

একটি সফ্ট রেফারেন্স অবজেক্ট মূলত একটি দুর্বল রেফারেন্স অবজেক্ট যা স্মৃতিতে আরও কিছুটা অবধি থাকে: সাধারণত, এটি জিসি চক্রটিকে প্রতিরোধ করে যতক্ষণ না কোনও স্মৃতি উপলব্ধ না হয় এবং এর ঝুঁকি থাকে OutOfMemoryErrorনা (সেই ক্ষেত্রে এটি অপসারণ করা যেতে পারে)।

অন্যদিকে, একটি ভৌত রেফারেন্স অবজেক্টটি কেবল তখনই জানতে কার্যকর হয় যখন কোনও বস্তুকে কার্যকরভাবে স্মৃতি থেকে সরানো হয়েছে: সাধারণত এগুলি অদ্ভুত চূড়ান্তকরণ () পুনর্জাগরণ / পুনরুত্থান আচরণ স্থির করতে ব্যবহৃত হয় , যেহেতু তারা আসলে বস্তুটি নিজেই ফেরত দেয় না তবে কেবল তাদের স্মৃতি উপস্থিতি ট্র্যাক রাখতে সহায়তা করে

দুর্বল রেফারেন্স অবজেক্টগুলি ক্যাশে মডিউলগুলি প্রয়োগ করার জন্য আদর্শ। প্রকৃতপক্ষে, জিসি মেমরি অঞ্চলগুলি পরিষ্কার করার অনুমতি দিয়ে এক ধরণের স্বয়ংক্রিয় উচ্ছেদ কার্যকর করা যেতে পারে যখনই শক্তিশালী রেফারেন্স চেইন দ্বারা বস্তু / মানগুলি আর পৌঁছানো যায় না। উদাহরণস্বরূপ WeakHashMap দুর্বল কীগুলি ধরে রাখা।


76

দুর্বল রেফারেন্স:

একটি দুর্বল রেফারেন্স, সহজ কথায় বলতে গেলে, এমন একটি রেফারেন্স যা কোনও বস্তুকে স্মৃতিতে রাখতে বাধ্য করার মতো শক্তিশালী নয়। দুর্বল রেফারেন্সগুলি আপনাকে আবর্জনা সংগ্রহকারী আপনার পক্ষে পুনরায় ব্যবহারযোগ্যতা নির্ধারণের দক্ষতা লাভ করার অনুমতি দেয়, তাই আপনাকে এটি নিজেই করতে হবে না।

নরম রেফারেন্স:

একটি সফট রেফারেন্স হুবহু দুর্বল রেফারেন্সের মতো, এটি বাদ দিয়ে যে বস্তুটিকে বোঝায় তা ফেলে দিতে কম আগ্রহী না। কেবলমাত্র দুর্বলভাবে পৌঁছনীয় এমন কোনও বস্তু (এর শক্তিশালী উল্লেখগুলি WeakReferences হ'ল) ​​পরবর্তী আবর্জনা সংগ্রহের চক্রের মধ্যে ফেলে দেওয়া হবে, তবে যে বস্তুটি নরমভাবে পৌঁছতে পারে তা সাধারণত কিছুক্ষণের জন্য স্থির থাকবে।

ভুত রেফারেন্স:

ফ্যান্টম রেফারেন্স সফটরিফারেন্স বা উইক রেফারেন্সের চেয়ে বেশ আলাদা। এর বস্তুর উপর এর গ্রিপটি এতটাই স্থূল যে আপনি এমনকি অবজেক্টটি পুনরুদ্ধার করতে পারবেন না - এটির () পদ্ধতিটি সর্বদা শূন্য হয়। এই জাতীয় রেফারেন্সের একমাত্র ব্যবহার কখন এটি একটি রেফারেন্সকুইয়েতে সজ্জিত করা হয় তা ট্র্যাক করে রাখা, যেমন আপনি তখন জানেন যে এটি যে বস্তুটির দিকে ইঙ্গিত করেছে তা মারা গেছে।

এই পাঠ্যটি থেকে বের করা হয়েছিল: https://weblogs.java.net/blog/2006/05/04/ বোঝাপড়া- উইক- রেফারেন্স


1
যদিও এই উত্তরের সমস্ত কিছুই সঠিক দেখাচ্ছে, এটি আমার কাছেও এমন দেখাচ্ছে যেন লিঙ্কযুক্ত ওয়েবপৃষ্ঠায় কোনও ত্রুটি থাকতে পারে। প্যাকেজ java.lang.ref জন্য Javadoc এবং যে PhantomReference সুপারিশ যে একটি বস্তু হওয়া পর্যন্ত এটা এখন আর "ভৌতিক পৌঁছানো" হয়, implying যে (SoftReference অসদৃশ) একটি PhantomReference বস্তুর এটা করতে পারেন বোঝায় আগে dequeued করা আবশ্যক সংগৃহীত আবর্জনা নয় আবর্জনা সংগ্রহ করা হবে ... এবং এটি উত্সাহিত করা ইঙ্গিত দেয় না যে সম্পর্কিত স্মৃতি মুক্ত হয়েছে।
থিওডোর মুরডক

2
রেকর্ডটির জন্য, আমি বরং এমন একটি পৃথিবীতে বাস করব যেখানে ব্লগ পোস্টটি সঠিক।
থিওডোর মুরডক

1
পুনঃটুইট একটি কৌতুক রেফারেন্স মোটেই আবর্জনা সংগ্রহে বাধা দেয় না। একবার যখন কোনও বস্তু সজ্জিত হয়ে যায়, এটি চূড়ান্তকরণকারীর মাধ্যমে সংরক্ষণও করা যায় না, কারণ চূড়ান্তকরণ ইতিমধ্যে চালানো হয়েছে। এটা মারা গেছে, কিন্তু এখনও যায় নি।
লেলিয়েল

@Leliel বাস্তবিক, একটি ভৌতিক রেফারেন্স করে পরে এটি enqueued কারণে বাধা আবর্জনা সংগ্রহের ... আমি সম্প্রতি এই উপলব্ধি যখন একটি বাগ গোড়ার দিকে প্রস্থান করার জন্য একটি পরিষ্করণ থ্রেড হত। ভ্যান্টাম রেফারেন্সের অস্তিত্বটি নিশ্চিত হয়েছিল যে প্রতিটি ফ্যান্টাম রেফারেন্স করা অবজেক্টটি আমার হিপ ডাম্পে ধরে রাখা হয়েছিল, সংগ্রহের জন্য অনুপলব্ধ ... যদি আপনি সারিটি প্রক্রিয়া করতে ব্যর্থ হন, বা সারি প্রক্রিয়াকরণের সময় ভ্যান্টেম রেফারেন্সকে জিসি-র জন্য যোগ্য করে তুলতে ব্যর্থ হন ( এবং () কাহিনী রেফারেন্সটি সাফ করবেন না, তারপরে আপনার মেমরি ফুটোতে ভ্যান্টাম রেফারেন্স এবং রেফারেন্স করা বস্তু উভয়ই অন্তর্ভুক্ত থাকবে।
থিওডোর মুরডক

25

মধ্যে সহজ পার্থক্য SoftReferenceএবং WeakReferenceদ্বারা প্রদান করা হয় Android বিকাশকারী

A SoftReferenceএবং a এর মধ্যে পার্থক্য WeakReferenceহ'ল বিন্দুটি যেখানে সিদ্ধান্তটি পরিষ্কার করা এবং রেফারেন্স তৈরি করার সিদ্ধান্ত নেওয়া হয়:

  • একজন SoftReferenceসাফ এবং যে হয়, মামলায় VM- র মেমোরির পরিমাণ চলমান বিপদের মধ্যে আছে, যতটা সম্ভব প্রয়াত যেমন enqueued দিতে হবে।

  • একজন WeakReferenceসাফ এবং enqueued যত তাড়াতাড়ি স্বাস্থ্যহীন-রেফারেন্সড হিসেবে পরিচিত হতে পারে।


16

আপনি যে তিনটি শর্তাদি ব্যবহার করেছেন তা বেশিরভাগ ক্ষেত্রে আবর্জনার সংগ্রহের অবজেক্টের যোগ্যতার সাথে সম্পর্কিত।

দুর্বল রেফারেন্স :: এটি এমন একটি রেফারেন্স যা বস্তুকে স্মৃতিতে রাখতে বাধ্য করার মতো শক্তিশালী নয়। তার আবর্জনা সংগ্রাহক এর খেয়ালখুশির আবর্জনা সংগ্রহের জন্য যে বস্তুর সংগ্রহ। আপনি জিসিকে এটি সংগ্রহ না করার জন্য জোর করতে পারবেন না

সফট রেফারেন্স :: এটি দুর্বল রেফারেন্সের মতো কমবেশি একই রকম। তবে আপনি বলতে পারেন যে এটি আবর্জনা সংগ্রহের দুর্বল রেফারেন্সের চেয়ে কিছুটা দৃ strongly়ভাবে ধারণ করে।

যদি আবর্জনা সংগ্রহকারীরা নিজেই প্রথম জীবনচক্রের দুর্বল রেফারেন্স সংগ্রহ করে তবে এটি আবর্জনা সংগ্রহের পরবর্তী চক্রের নরম রেফারেন্স সংগ্রহ করবে।

শক্তিশালী রেফারেন্স :: এটি উপরোক্ত দুটি ধরণের রেফারেন্সের ঠিক বিপরীত। তারা আবর্জনা সংগ্রহ করার মতো পছন্দ কম (বেশিরভাগ ক্ষেত্রে তারা কখনই সংগ্রহ করা হয় না))

আরও তথ্যের জন্য আপনি নীচের লিঙ্কটি উল্লেখ করতে পারেন:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ref/Reference.html


3
আমি এটি ভুল বলে মনে করি - "আবর্জনা সংগ্রহকারীরা যদি প্রথম জীবনচক্রের মধ্যে নিজেই দুর্বল রেফারেন্স সংগ্রহ করে তবে এটি আবর্জনা সংগ্রহের পরবর্তী চক্রের নরম রেফারেন্স সংগ্রহ করবে" " এটি অগত্যা সেভাবে নয়, আপনি কীভাবে এতটা নিশ্চিত হতে পারেন যে তারা জিসির টানা দৌড়ে ঘটে? জিসি নরম রেফারেন্সযুক্ত বস্তুগুলিকে এমনকি ২ য় রান এবং তৃতীয় রানেও বাঁচতে দেয়। এটির জন্য কোনও ডকুমেন্টেশন নেই, যদি সেখানে থাকে তবে দয়া করে লিঙ্কটি উল্লেখ করে উল্লেখ করুন।
সৌরভ পাতিল

2
এছাড়াও, আপনার উত্তরটি কিছুটা অস্পষ্ট, এই বাক্যটি দেখুন 'এটি দুর্বল রেফারেন্সের মতো কমবেশি একই। তবে আপনি বলতে পারেন যে এটি আবর্জনা সংগ্রহের দুর্বল রেফারেন্সের চেয়ে কিছুটা দৃ strongly়ভাবে ধারণ করে। ' - তিনি স্পষ্টতই পার্থক্য সম্পর্কে জিজ্ঞাসা করছেন না মিলগুলি নয়, এই সমস্ত শব্দগুলি বিষয়টির স্পষ্টতার চেয়ে আরও বিভ্রান্তি যুক্ত করে।
সৌরভ পাতিল

@ সৌরভপতিল - আপনার মন্তব্য মিস করেছেন। উত্তরগুলি এখানে যায়। 1. "তিনি স্পষ্টতই পার্থক্য সম্পর্কে জিজ্ঞাসা করছেন না মিলগুলি" - প্রশ্নের বিবরণ দেখুন ("কেবল" উপাধি নয়)) "দয়া করে আমাকে কিছু পরামর্শ দিন, এবং দয়া করে আমাকে বর্ণনা দেওয়ার জন্য কিছু উদাহরণ দিন"। ২. "তবে আপনি বলতে পারেন যে এটি বস্তুকে আরও কিছুটা ধরে রেখেছে ...." আমি মনে করি এসওএফ ডাউন-ভোটিংয়ের বিকল্প দেয় এবং নতুন উত্তরও দেয়।
সব্য

14

এই নিবন্ধটি শক্তিশালী, নরম, দুর্বল এবং ভৌতিক রেফারেন্সগুলি বোঝার জন্য অত্যন্ত সহায়ক হতে পারে।


আপনাকে একটি সংক্ষিপ্ত বিবরণ দিতে,

যদি আপনার কোনও জিনিসের দৃ strong় রেফারেন্স থাকে তবে জিসি (আবর্জনা সংগ্রাহক) দ্বারা কখনই সেই জিনিসটি সংগ্রহ / পুনরুদ্ধার করা যাবে না।

যদি আপনার কাছে কেবল কোনও অবজেক্টের প্রতি দুর্বল রেফারেন্স থাকে (কোনও শক্তিশালী রেফারেন্স ছাড়াই), তবে অবজেক্টটি GC দ্বারা পরের জিসি চক্রটিতে পুনরুদ্ধার করা হবে।

আপনার যদি কেবল কোনও জিনিসের নরম রেফারেন্স থাকে (কোনও শক্তিশালী রেফারেন্স ছাড়াই), তবে জেভি দ্বারা স্মৃতিশক্তি শেষ হয়ে গেলে কেবল এই বিষয়টিকে জিসি দ্বারা পুনরুদ্ধার করা হবে।

আমরা কখন বস্তুটির মধ্যে intoুকে পড়েছি সে সম্পর্কে নজর রাখতে কোনও বস্তুর জন্য ফ্যান্টম রেফারেন্স তৈরি করি ReferenceQueue। একবার আপনি জানতে পারবেন যে আপনি সূক্ষ্ম দানাযুক্ত চূড়ান্তকরণ করতে পারেন। (এটি আপনাকে দুর্ঘটনাক্রমে বস্তুটিকে পুনরুত্থিত করা থেকে রক্ষা করবে কারণ ভৌত-রেফারেন্স আপনাকে রেফারেন্ট দেয় না) আমি আপনি পড়া করার সুপারিশ করছি এই এই সম্পর্কে গভীরভাবে বিস্তারিত পেতে নিবন্ধ।


সুতরাং আপনি এটি বলতে পারেন, শক্তিশালী উল্লেখগুলির চূড়ান্ত শক্তি থাকে (কখনই জিসি দ্বারা সংগ্রহ করা যায় না)

সফ্ট রেফারেন্সগুলি দুর্বল রেফারেন্সগুলির চেয়ে শক্তিশালী (কারণ তারা জিসিএম মেমরিটি শেষ না হওয়া পর্যন্ত জিসি চক্র থেকে পালাতে পারে)

দুর্বল রেফারেন্সগুলি নরম রেফারেন্সগুলির তুলনায় আরও কম শক্তিশালী (কারণ তারা কোনও জিসি চক্রটি এড়াতে পারবেন না এবং যদি বস্তুর অন্য কোনও শক্তিশালী রেফারেন্স না থাকে তবে পুনরায় দাবি করা হবে)।


রেস্তোঁরা সাদৃশ্য

  • ওয়েটার - জিসি
  • আপনি - গাদা মধ্যে বস্তু
  • রেস্তোঁরা এলাকা / স্থান - গাদা জায়গা
  • নতুন গ্রাহক - নতুন বস্তু যা রেস্তোঁরায় টেবিল চায়

এখন আপনি যদি একজন শক্তিশালী গ্রাহক (দৃ strong় রেফারেন্সের সাথে সমান) হন তবে এমনকি যদি কোনও নতুন গ্রাহক রেস্তোরাঁয় আসে বা যা এখনও সুখী হয় তবে আপনি কখনই আপনার টেবিলটি ছাড়বেন না (গাদা স্মৃতির অঞ্চল)। ওয়েটারের রেস্তোঁরা ছেড়ে যাওয়ার জন্য আপনাকে বলার (বা এমনকি আপনাকে অনুরোধ করার) অধিকার নেই।

আপনি যদি কোনও নরম গ্রাহক হন (নরম রেফারেন্সের সাথে সাদৃশ্যপূর্ণ), তবে যদি নতুন কোনও গ্রাহক রেস্তোঁরায় আসে তবে ওয়েটার আপনাকে নতুন গ্রাহককে থাকার জন্য অন্য কোনও খালি টেবিল না রেখে টেবিলে ছেড়ে যেতে বলবে না। (অন্য কথায় ওয়েটার আপনাকে কেবল টেবিলটি ছেড়ে যেতে বলবে যদি কোনও নতুন গ্রাহক প্রবেশ করেন এবং এই নতুন গ্রাহকের জন্য অন্য কোনও টেবিল অবশিষ্ট নেই)

আপনি যদি কোনও দুর্বল গ্রাহক (দুর্বল রেফারেন্সের সাথে সাদৃশ্য) হন, তবে ওয়েটার তার ইচ্ছামতো (যে কোনও সময়) আপনাকে রেস্তোঁরা ছাড়তে চাইতে পারেন: পি


10

রেফারেন্সের 4 ডিগ্রি - Strong, Weak, Soft, Phantom

স্ট্রং - এক প্রকারের রেফারেন্স, যা রেফারেন্সযুক্ত বিষয়টিকে জিসির জন্য যোগ্য না করে তোলে। বিল্ডার ক্লাস। যেমন - স্ট্রিংবিল্ডার

দুর্বল - এমন একটি উল্লেখ যা জিসির জন্য যোগ্য।

সফট - এমন এক প্রকারের রেফারেন্স যার মেমরিটি অ্যাক্সেসযোগ্য না হওয়া পর্যন্ত অবজেক্টটি জিসির পক্ষে যোগ্য। চিত্র ক্যাশে জন্য সেরা। স্মৃতি উপলব্ধ না হওয়া পর্যন্ত এটি তাদের ধরে রাখবে available

ফ্যান্টম - এমন এক প্রকারের রেফারেন্স যার অবজেক্ট সরাসরি জিসির জন্য যোগ্য। কোনও বস্তু যখন মেমরি থেকে সরানো হয় কেবল তখন তা জানতে ব্যবহৃত হয়।

ব্যবহারসমূহ:

  1. কোনও জিনিস কখন মেমরি থেকে একেবারে সরানো হয় তা আপনাকে সনাক্ত করতে অনুমতি দেয়।

  2. যখন finalize()পদ্ধতিটি ওভারলোড হয়, তখন জিসি দুটি শ্রেণির জিসি যোগ্য অবজেক্টগুলির জন্য সময়োপযোগী ফ্যাশনে না ঘটে। সুতরাং ভৌতিক রেফারেন্স এগুলিকে জিসির জন্য যোগ্য করে তোলে finalize(), এজন্য আপনি বেশিরভাগ স্তূপ আবর্জনা থাকা সত্ত্বেও আপনি আউটআফমিউরিইরিজগুলি পেতে পারেন ।

দুর্বল উল্লেখগুলি ক্যাশে মডিউলগুলি বাস্তবায়নের জন্য আদর্শ।


10

শক্তিশালী তথ্যসূত্র

এগুলি আপনার নিয়মিত অবজেক্টের রেফারেন্স যা আমরা প্রতিদিনই কোড করি:

Employee emp = new Employee();

ভেরিয়েবল "এমপ" কোনও কর্মচারী অবজেক্টের একটি শক্তিশালী রেফারেন্স ধারণ করে এবং যে কোনও বস্তু শক্তিশালী রেফারেন্সের মাধ্যমে পৌঁছতে পারে সেগুলি আবর্জনা সংগ্রহের জন্য যোগ্য নয়। সাধারণত, আপনি যা চান তা এটি তবে সর্বদা নয়। এখন ধরা যাক আমরা সংগ্রহ বা মানচিত্রে ডাটাবেস থেকে প্রচুর কর্মচারী আনছি এবং তাদের উপর নিয়মিত আমাদের প্রচুর প্রসেসিং করা দরকার, সুতরাং কর্মক্ষমতা রাখার জন্য আমরা তাদের ক্যাশে রাখব।

যতদূর এটি ভাল তবে এখন আমাদের বিভিন্ন ডেটা প্রয়োজন এবং আমাদের সেই কর্মচারী বস্তুর প্রয়োজন নেই এবং এগুলি ক্যাশে ব্যতীত অন্য কোথাও থেকে রেফারেন্স করা হয় না। কোনটি মেমরি ফুটো করার কারণ হ'ল কারণ এই বস্তুগুলি ব্যবহারে নেই তবে এখনও আবর্জনা সংগ্রহের জন্য যোগ্য নয় এবং আমরা এই বিষয়গুলি ক্যাশে থেকে সরাতে পারি না কারণ সেগুলির উল্লেখ নেই? সুতরাং এখানে হয় আমাদের পুরো ক্যাসটি ম্যানুয়ালি খালি করা দরকার যা ক্লান্তিকর বা আমরা অন্যান্য ধরণের রেফারেন্স যেমন দুর্বল রেফারেন্স ব্যবহার করতে পারি।

দুর্বল রেফারেন্স

একটি দুর্বল রেফারেন্স কোনও বস্তুকে মেমোরিতে পিন করে না এবং অন্যান্য রেফারেন্স থেকে রেফারেন্স না দিলে পরবর্তী জিসি চক্রটিতে জিসিড করা হবে। উপরের ধরণের ক্যাশে তৈরি করতে আমরা জাভা দ্বারা সরবরাহিত WeakReferences ক্লাসটি ব্যবহার করতে পারি, যা অন্য কোথাও থেকে রেফারেন্সযুক্ত না এমন বস্তু সংরক্ষণ করবে না।

WeakReference<Cache> cache = new WeakReference<Cache>(data);

ডেটা অ্যাক্সেস করতে আপনাকে ক্যাশে.জেট () কল করতে হবে। দুর্বল রেফারেন্সটি আবর্জনা সংগ্রহ করা হলে এই কলটি বাতিল হতে পারে: এনপিইগুলি এড়াতে আপনাকে অবশ্যই ফিরে আসা মানটি পরীক্ষা করতে হবে check জাভা এমন সংগ্রহ সরবরাহ করে যা দুর্বল উল্লেখগুলি ব্যবহার করে যেমন WeakHashMap শ্রেণীর কীগুলি (মান নয়) দুর্বল উল্লেখ হিসাবে as কীটি যদি GC'd হয় তবে মানচিত্রটি স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।

যেহেতু দুর্বল রেফারেন্সগুলি হ'ল বস্তু হ'ল আমাদের সেগুলি পরিষ্কার করারও একটি উপায় প্রয়োজন (তারা যে বিষয়টিকে রেফারেন্স করছিল তারা জিসি'ডি হয়ে গেলে তারা আর কার্যকর হয় না)। যদি আপনি কোনও দুর্বল রেফারেন্সের জন্য কনস্ট্রাক্টরে একটি রেফারেন্সকিউ পাস করেন তবে আবর্জনা সংগ্রহকারীরা তাদের চূড়ান্ত হওয়ার আগে বা জিসি'র আগে রেফারেন্সকিউতে সেই দুর্বল রেফারেন্স যুক্ত করবে। আপনি পর্যায়ক্রমে এই সারিটি প্রক্রিয়া করতে এবং মৃত রেফারেন্সগুলি নিয়ে ডিল করতে পারেন।

নরম রেফারেন্স

একটি সফট রেফারেন্স হ'ল উইক রেফারেন্সের মতো তবে এটি আবর্জনা সংগ্রহের সম্ভাবনা কম। সফটওয়্যার রেফারেন্সগুলি মেমরির চাহিদার প্রতিক্রিয়া হিসাবে আবর্জনা সংগ্রাহকের বিবেচনার ভিত্তিতে সাফ করা হয়। ভার্চুয়াল মেশিনটি গ্যারান্টি দেয় যে আস্তে আস্তে পৌঁছানো যায় এমন বস্তুগুলির সমস্ত নরম রেফারেন্স পরিষ্কার হয়ে যাবে এর আগে এটি কোনও আউটআফমিউরিওর ফেলে দেয়।

ভুত রেফারেন্স

ফ্যান্টম রেফারেন্সগুলি সমস্ত রেফারেন্স প্রকারের মধ্যে সবচেয়ে দুর্বল, তাদের সাথে কল করা সর্বদা বাতিল হয়ে যাবে return কোনও বস্তুটি চূড়ান্ত হওয়ার পরে অস্থায়ীভাবে রেফারেন্স করা হয়, তবে এর বরাদ্দ হওয়া স্মৃতি পুনরুদ্ধার করার আগে, দুর্বল রেফারেন্সগুলির বিপরীতে যা চূড়ান্ত হওয়ার আগে উত্সাহিত হয় বা জিসি'ড ফ্যান্টম রেফারেন্স খুব কমই ব্যবহৃত হয়।

সুতরাং তারা কিভাবে দরকারী? যখন আপনি কোনও ফ্যান্টম রেফারেন্স তৈরি করেন আপনাকে অবশ্যই সর্বদা একটি রেফারেন্সকিউতে পাস করতে হবে। এটি ইঙ্গিত দেয় যে কখন আপনার অবজেক্টটি GC'd হবে তা দেখার জন্য আপনি এক ভৌত রেফারেন্স ব্যবহার করতে পারেন।

আরে, সুতরাং দুর্বল রেফারেন্সগুলি যদি চূড়ান্ত হিসাবে বিবেচনা করা হয় তবে এখনও জিসি না করা হয় তবে আমরা চূড়ান্তকরণকারী ব্লকে অবজেক্টের জন্য একটি নতুন শক্তিশালী রেফারেন্স তৈরি করতে পারি এবং বস্তুটি জিসি'ড হওয়া আটকাতে পারি। হ্যাঁ, আপনি পারবেন তবে আপনার সম্ভবত এটি করা উচিত নয়। এই ক্ষেত্রেটি যাচাই করতে জিসি চক্র প্রতিটি বস্তুর জন্য কমপক্ষে দুবার ঘটবে যদি না সেই বস্তুটি কেবল ভৌত রেফারেন্স দ্বারা পৌঁছতে পারে। এ কারণেই আপনার স্মৃতিতে প্রচুর পরিমাণে আবর্জনা থাকা অবস্থায়ও আপনি স্তূপের বাইরে চলে যেতে পারেন। ফ্যান্টম রেফারেন্সগুলি এটি প্রতিরোধ করতে পারে।

আপনি আমার নিবন্ধে আরও পড়তে পারেন জাভাতে প্রকারের প্রকারগুলি (শক্তিশালী, নরম, দুর্বল, ভুত)


আপনি লিখেছেন যে দুর্বল রেফারেন্সগুলি পরবর্তী চক্রটিতে জিসি'ড করা হবে যদি অন্য রেফারেন্সগুলি থেকে পুনরায় প্রকাশ না করা হয় ... তবে দৃ stron় রিফ্রেন্সে একই জিনিসটি ঘটে না? যদি কোনওভাবেই দৃre়ভাবে শ্রদ্ধার অ্যাক্সেস না পাওয়া যায় তবে পরিষ্কার হয়ে যায় ... তাহলে যদি তাই হয় তবে আবার পার্থক্য কোথায় ...? # কনফিউজড
filemonczyk

1
যদি কোনও বস্তুর s1 (শক্ত) এবং s2 (শক্তিশালী) থেকে উল্লেখ করা হচ্ছে, অবধি এস 1 এবং এস 2 উভয়ই অবজ্ঞাপূর্ণ না হওয়া অবধি আবর্জনা সংগ্রহের জন্য উপযুক্ত হবে না তবে যদি বস্তুটি এস 1 (দুর্বল) এবং এস 2 (রেফারেন্স) থেকে রেফার করা হচ্ছে ( শক্তিশালী) এরপরে অবজেক্টটি কেবল পরবর্তী এসিসি থেকে কেবলমাত্র এস -2 থেকে অবহেলিত হয়ে গেলে আবর্জনা সংগ্রহের জন্য উপযুক্ত হবে, কারণ এস 1 একটি দুর্বল রেফারেন্স এবং দুর্বলটিকে বাদ দিয়ে যদি অন্য কোনও রেফারেন্স না থাকে তবে এটি
জিসির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.