আপনি কখন একটি WeKHashMap বা WeakReferences ব্যবহার করবেন?


163

দুর্বল রেফারেন্সগুলির ব্যবহার এমন কিছু যা আমি কখনই বাস্তবায়ন করতে দেখিনি তাই আমি তাদের ব্যবহারের ক্ষেত্রে কী আছে এবং বাস্তবায়ন কীভাবে কাজ করবে তা নির্ধারণ করার চেষ্টা করছি। আপনার কখন WeakHashMapবা কোনটি ব্যবহার করার দরকার WeakReferenceছিল?



উত্তর:


96

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

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

দুর্বল রেফারেন্সগুলি বোঝা , ইথান নিকোলাস


43
এই ক্ষেত্রে সফ্টফরেন্সগুলি আরও ভাল হবে না, উদাহরণস্বরূপ যা কেবল স্মৃতিশক্তি শেষ হয়ে গেলেই সংগ্রহ করা হয়।
জেস্পের

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

2
@ মার্কোলপস জিসি অন্য যে কোনও বিষয়ে ফাইনালাইজার ব্যবহার করবে। দেখে মনে হচ্ছে যে আপনি যখন এটি করবেন তখন এসডাব্লুটি এটি পছন্দ করে না, তাই আমি মনে করি না আপনি একটি দিয়ে অপারেটিং সিস্টেম সংস্থানগুলি পরিচালনা করতে পারেন WeakHashMap
জ্যাকব ক্রোল

@ মার্কোলপস, (আমি ধরে নিচ্ছি যে আপনার জিসি মেমরির পুনর্বিবেচনার আগে কোনও কল চূড়ান্ত করার গ্যারান্টি দেয় If) যদি ক্যাশে চূড়ান্তকরণে নিষ্পত্তি করা হয় তবে সবকিছু ঠিক আছে। যদি নিষ্পত্তি হ'ল ম্যানুয়ালি কল করতে হয় তবে 1) শ্রেণিটি প্রসারিত করুন এবং চূড়ান্তকরণে নিষ্পত্তি করুন, বা 2) ট্র্যাক করতে এবং সেই অনুযায়ী নিষ্পত্তি চালানোর জন্য ফ্যান্টম্রেফারেন্স ব্যবহার করুন। বিকল্প 2 আরও ভাল (পুনরুত্থান বাগগুলি এড়ানো, এবং আপনাকে অন্য থ্রেডে ডিসপোজ চালানোর ক্ষমতা দেয়), তবে বিকল্প 1টি হেল্পক্লাসগুলি ছাড়াই কার্যকর করা সহজ।
পেসারিয়ার


55

WeakReference বনাম SoftReference

একটি পার্থক্য স্পষ্ট করা হ'ল a WeakReferenceএবং a এর মধ্যে পার্থক্য SoftReference

মূলত একটি WeakReferenceহতে হবে জিসি-D দ্বারা জেভিএম সাগ্রহে, একবার রেফারেন্সড বস্তুর কোন হয়েছে হার্ড এটা রেফারেন্স। SoftReferenceঅন্যদিকে একটি ডি অবজেক্ট, আবর্জনা সংগ্রাহক যতক্ষণ না সত্যই এটির স্মৃতি পুনরায় দাবি করা দরকার ততক্ষণ এগুলি ফেলে রাখা হবে।

একটি ক্যাশে যেখানে মানগুলির ভিতরে রাখা হয় WeakReferenceতা খুব অকেজো ( WeakHashMapএকটিতে এটি কীগুলি দুর্বলভাবে উল্লেখ করা হয়)। SoftReferencesযখন আপনি একটি ক্যাশে প্রয়োগ করতে চান যা উপলব্ধ মেমরির সাথে বৃদ্ধি এবং সঙ্কুচিত হতে পারে তখন চারপাশের মানগুলিকে মোড়ানোর জন্য দরকারী।


4
"একটি ক্যাশে যেখানে ভ্যাকরফারেন্সগুলির অভ্যন্তরে মানগুলি রাখা হয় তা অত্যন্ত অকেজো হবে" আমি পুরোপুরি একমত নই।
থমাস এডিং

5
@ ত্রিনিথিস - এরম, আমি কী বলতে হবে তা সত্যই জানি না। এমন ক্যাশে কেন যার মানগুলি সেই মুহুর্তে অদৃশ্য হয়ে যাবে যখন আপনি তাদের কোনও দরকারী জিনিস উল্লেখ করছেন না ?
অক্সবো_লাক্স

4
স্মৃতিচারণের মতো কোনও কিছুর জন্য, ক্যাশে যা তার ক্যাশেড মানগুলি আলগাভাবে ধারণ করে তা কার্যকর হতে পারে।
টমাস এডিং

5
@ থমাসডিংয়ের পরেও আমি এটি পাই না। কেবল যখন কোনও ক্যাশে দরকারী মনে হয় কেবল তখনই এর সাথে অন্য কোনও উল্লেখ থাকে না ... আপনার যদি এর উল্লেখ থাকে তবে আপনার কী ক্যাশের প্রয়োজন?
ক্রাঞ্চার

2
@ থমাসডিং, সফটরেফ পরিবেশটিকে "আপনার স্মৃতিশক্তি না পাওয়া পর্যন্ত এটি সংরক্ষণ করুন" বলে। Weakref পরিবেশকে বলে "এটি জিসি চালা না হওয়া পর্যন্ত সংরক্ষণ করুন"। আপনি নিজে জিসি ডিবাগিং / প্রোফাইল না করা পর্যন্ত দুর্বলতার জন্য স্পষ্টভাবে কোনও ব্যবহারের ঘটনা নেই is আপনি যদি একটি মেমরি-সংবেদনশীল ক্যাশে চান তবে সফটরেফ ব্যবহার করুন। আপনি যদি ক্যাশে না চান, তবে এটি ক্যাশে করবেন না! দুর্বলতা কোথায় আসে?
পেসারিয়ার

30

বিশেষত WeakReferences এবং WeakHashMaps এর একটি সাধারণ ব্যবহার হ'ল বস্তুগুলিতে বৈশিষ্ট্য যুক্ত করা। মাঝে মাঝে আপনি কোনও বস্তুতে কিছু কার্যকারিতা বা ডেটা যুক্ত করতে চান তবে সাবক্লাসিং এবং / অথবা রচনাটি কোনও বিকল্প নয় সেই ক্ষেত্রে স্পষ্টত করণীয় হ'ল হ্যাশম্যাপ তৈরি করা যা আপনি যে সম্পত্তিতে যুক্ত করতে চান সেই অবজেক্টের সাথে সংযোগ স্থাপন করতে হবে to । তারপরে যখনই আপনার সম্পত্তির প্রয়োজন হবে তখনই আপনি এটি মানচিত্রে সন্ধান করতে পারেন। তবে, আপনি যে জিনিসগুলিতে বৈশিষ্ট্য যুক্ত করছেন তা যদি ধ্বংস হয়ে যায় এবং প্রচুর পরিমাণে তৈরি হয় তবে আপনি আপনার মানচিত্রে প্রচুর পুরানো অবজেক্ট দিয়ে প্রচুর স্মৃতি গ্রহণ করতে পারেন।

আপনি যদি এর WeakHashMapপরিবর্তে ব্যবহার করেন তবে অবজেক্টগুলি আপনার মানচিত্রটি যত তাড়াতাড়ি আপনার বাকি প্রোগ্রামের দ্বারা আর ব্যবহার করা হবে না তা ত্যাগ করবে, যা পছন্দসই আচরণ।

আমি কিছু ডেটা যোগ করার জন্য এই কি ছিল java.awt.Component1.4.2 এবং 1.5 মধ্যে JRE পরিবর্তন কাছাকাছি পেতে, আমি এটা প্রত্যেক উপাদান আমি আগ্রহী INT (ছিল subclassing দ্বারা নির্ধারিত হতে পারে JButton, JFrame, JPanel....) কিন্তু এই অনেক ছিল অনেক কম কোড সহ সহজ।


1
WeakHashMap কীভাবে জানতে পারে "এগুলি আপনার আর বাকি প্রোগ্রাম দ্বারা ব্যবহৃত হয় না"?
বিনোথ কুমার সিএম

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

1
ধন্যবাদ লুয়েক, আপনি কি বর্ণনাটির জন্য সহজ কোড সরবরাহ করতে পারবেন?
সেদ্ধ জল

সুতরাং, জাভাটির স্পর্শকাতর API এর জন্য দুর্বলতা কেবল জাভাতে উপলব্ধি করে যেখানে কিছু শ্রেণি বাড়ানো যায় না।
পেসারিয়ার

22

আরেকটি দরকারী ক্ষেত্রে WeakHashMapএবং WeakReferenceএকটি হয় শ্রোতা রেজিস্ট্রি বাস্তবায়ন

যখন আপনি এমন কিছু তৈরি করেন যা কিছু নির্দিষ্ট ইভেন্ট শুনতে চায়, সাধারণত আপনি শ্রোতাদের নিবন্ধন করেন, যেমন

manager.registerListener(myListenerImpl);

যদি managerআপনার শ্রোতাকে একটি দিয়ে সঞ্চয় করে রাখে তবে এর WeakReferenceঅর্থ আপনার নিবন্ধকটিকে সরিয়ে ফেলতে manager.removeListener(myListenerImpl)হবে না কারণ এটি আপনার শ্রোতা বা শ্রোতার ধারক আপনার উপাদান অনুপলব্ধ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে সরানো হবে।

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

কোথায় আছে WeakHashMapছবিতে আসে ?

শ্রোতার রেজিস্ট্রি যা রেজিস্টার্ড শ্রোতাদের WeakReferenceসংরক্ষণ করতে পছন্দ করে এই রেফারেন্সগুলি সঞ্চয় করার জন্য একটি সংগ্রহ প্রয়োজন। WeakHashSetস্ট্যান্ডার্ড জাভা লাইব্রেরিতে কেবলমাত্র কোনও প্রয়োগ নেই WeakHashMapতবে আমরা প্রথমটির কার্যকারিতাটি "প্রয়োগ" করতে খুব সহজেই পরবর্তীটি ব্যবহার করতে পারি:

Set<ListenerType> listenerSet =
    Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());

সঙ্গে এই listenerSetএকটি নতুন শ্রোতা রেজিস্টার আপনি শুধু সেট এটি যোগ করতে আছে, এবং যদিও তা স্পষ্টভাবে মুছে ফেলা না হয়, শ্রোতা আর রেফারেন্সড হয়, তাহলে এটি স্বয়ংক্রিয়ভাবে JVM দ্বারা সরানো হবে।


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

শ্রোতার রেজিস্ট্রি প্রয়োগের জন্য: সমস্ত নিবন্ধিত শ্রোতা পরবর্তী জিসি কিকের উপর সংগ্রহ / ধ্বংস করা হবে? উদাহরণস্বরূপ, সমস্ত শ্রোতার অনোমিংহ্যাপডেন () পদ্ধতিতে গুলি চালানোর সময়, জিসি লাথি দিলে কী ঘটে?
কালোকারা

@ আইকজা, আমি বিশ্বাস করতে পারি না যে লোকেরা এখনও এই কল্পকাহিনীটি আঁকছেন। এটি সম্পূর্ণ ভুল উত্তর। আপনি WeakHashMapযখন অন্য কোনও HashMapজিনিস প্রয়োজন তখনই আপনি অন্য দরকারী কেসটি বলতে পারেন। তাই ঘেউ আপনি নিজে কি করতে হবে না hashmap.remove কি কখনো কারণ আইটেম স্বয়ংক্রিয়ভাবেই আপনার সরিয়ে ফেলা হয় একবার obj পরিধি হয়! আক্ষরিক যাদু! এই ধরনের একটি কুশ্রী জাদু হ্যাক একটি হল সম্পূর্ণ facepalm
পেসারিয়ার

3
@ পেসারিয়র: আমি এখানে জাভাস্ক্রিপ্টের অন্যান্য মন্তব্যের থেকে আপনার লিঙ্কগুলি সমস্ত নীচে অনুসরণ করেছি এবং এখনও উইকম্যাপের সাথে শ্রোতার রেজিস্ট্রি বাস্তবায়ন একটি রূপকথার কারণ কেন তা বেশিরভাগই বুঝতে পারি না। উদাহরণস্বরূপ, যদি ওয়েবসকেট ক্লায়েন্টদের তাদের রেজিস্ট্রি পরিষেবার মাধ্যমে কিছু শ্রোতার সাথে আবদ্ধ করা উচিত তবে উইকেম্যাপে কী হিসাবে সকেট অবজেক্টগুলি সংরক্ষণ করা যুক্তিসঙ্গত বলে মনে হয় (সংযোগ বন্ধ হওয়ার পরে স্মৃতিতে ঝুলানো থেকে বিরত রাখতে, ত্রুটিতে বলে) এবং সক্ষম হওয়া প্রয়োজনে তাদের সমস্ত শ্রোতাদের পুনরুদ্ধার করতে। সুতরাং, আপনি দয়া করে বলতে পারেন, এই পদ্ধতির সাথে ঠিক কী ভুল?
জৈব ক্ষতি হয়েছে

1
@ পেসারিয়ার আমিও আপনার আপত্তি বুঝতে ব্যর্থ। একটি প্রকাশনা-সাবস্ক্রাইব বা ইভেন্ট বাসের দৃশ্যে, দুর্বল উল্লেখগুলির সংকলন আমার কাছে সঠিক ধারণা দেয়। সাবস্ক্রাইব করা অবজেক্টটি আনুষ্ঠানিকভাবে সাবস্ক্রাইব করার কোনও প্রয়োজন ছাড়াই সুযোগের বাইরে যাওয়ার এবং আবর্জনা সংগ্রহের দিকে যাওয়ার অনুমতি রয়েছে। সাবস্ক্রাইব করার সেই প্রক্রিয়াটি বিশেষত জটিল হতে পারে যদি তৃতীয় পক্ষের অবজেক্ট সাবস্ক্রাইব করা অবজেক্টের জ্ঞান ছাড়াই প্রাথমিক সাবস্ক্রিপশনের জন্য দায়ী ছিল। একটি সংগ্রহ WeakReferenceকোড বেসকে সহজতর করে এবং সাবস্ক্রাইব করতে ব্যর্থ সম্পর্কিত অযথা বাগগুলি এড়িয়ে চলে। কি খারাপ?
তুলিল বাউরক

5

এই ব্লগ পোস্টটি উভয় শ্রেণির ব্যবহার দেখায়: জাভা: একটি আইডিতে সিঙ্ক্রোনাইজ করা । ব্যবহারটি এরকম কিছু হয়:

private static IdMutexProvider MUTEX_PROVIDER = new IdMutexProvider();

public void performTask(String resourceId) {
    IdMutexProvider.Mutex mutext = MUTEX_PROVIDER.getMutex(resourceId);
    synchronized (mutext) {
        // look up the resource and do something with it
    }
}

আইডমিউটেক্সটপ্রভাইডার সিঙ্ক্রোনাইজ করতে আইডি-ভিত্তিক অবজেক্টগুলি সরবরাহ করে। প্রয়োজনীয়তাগুলি হ'ল:

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

এটি ধরণের অভ্যন্তরীণ স্টোরেজ মানচিত্র ব্যবহার করে অর্জন করা হয়েছে:

WeakHashMap<Mutex, WeakReference<Mutex>>

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


3

আপনি উদাহরণস্বরূপ যদি একটি নির্দিষ্ট শ্রেণীর তৈরি সমস্ত বস্তুর উপর নজর রাখতে চান। এখনও এই জিনিসগুলি আবর্জনা সংগ্রহ করার অনুমতি দিতে, আপনি নিজেরাই বস্তুর পরিবর্তে বস্তুর প্রতি দুর্বল উল্লেখগুলির একটি তালিকা / মানচিত্র রাখেন।

এখন যদি কেউ আমার কাছে ফ্যান্টম-রেফারেন্স ব্যাখ্যা করতে পারে তবে আমি খুশি হব ...


2
একটি ব্যবহার: ফ্যান্টম রেফারেন্স আপনাকে কখন নির্ধারণ করতে দেয় কোনও জিনিস কখন মেমরি থেকে সরানো হয়েছিল। তারা প্রকৃতপক্ষে এটি নির্ধারণের একমাত্র উপায়। ( ওয়েবলগস.জভা.নেট / ব্লগ / এ্যানিকোলস / অর্চিভ / ২০০6/০5/২ )
জ্যাকব ক্রল

বাস্তবে এটি মুছে ফেলা হয় না যতক্ষণ না আপনি স্পষ্টভাবে এটি পরিষ্কার করে দেন। "নরম এবং দুর্বল রেফারেন্সের বিপরীতে, ভুতুড়ে রেফারেন্সগুলি আবর্জনা সংগ্রহকারী দ্বারা স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় না An
jontro

@ জন্ট্রো, তবে এটি ইতিমধ্যে চূড়ান্ত হয়ে গেছে, সমস্ত সদস্য চলে গেছে। কার্যকরভাবে, এটি একটি ফাঁকা আপত্তি। দেখুন stackoverflow.com/q/7048767/632951
Pacerier

3

উপরে উল্লিখিত হিসাবে, দুর্বল রেফারেন্স যতক্ষণ দৃ strong় রেফারেন্স বিদ্যমান থাকে ততক্ষণ ধরে রাখা হয়।

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

উপরে বর্ণিত শ্রোতাদের সাথে খেলতে গিয়ে আমরা দ্রুত বুঝতে পারি যে ব্যবহারকারীর দৃষ্টিভঙ্গি থেকে অবজেক্টগুলি "তাত্ক্ষণিকভাবে" সংগ্রহ করা হয়।


ধন্যবাদ দরকারী উত্তর। তবে আমি ভাবছি, সেক্ষেত্রে শ্রোতাদের কি দৃ strongly়তার সাথে নিবন্ধভুক্ত করা উচিত (রেফারেন্স করা)?
কালোকারা

এই উত্তর সম্পূর্ণ ভুল। বিবরণাদি: stackoverflow.com/questions/154724/...
Pacerier

@ পেসারিয়ার - WeakReferencesআপনার মন্তব্য সম্পূর্ণ ভুল!

2

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


1
এটি একটি সফটরিফারেন্স, দুর্বলতা নয়। দেখুন stackoverflow.com/a/155492/632951
Pacerier

1

আমি "নতুন WeakHashMap ()" এর জন্য একটি গুগল কোড অনুসন্ধান করেছি।

আমি জিএনইউ ক্লাসপথ প্রকল্প থেকে একগুচ্ছ ম্যাচ পেয়েছি এবং

  1. অ্যাপাচি জিবিন প্রকল্প: WeakHashMapEditor.java
  2. অ্যাপাচি লুসিন প্রকল্প: ক্যাচিংওয়্যারফিল্টার.জভা ava

-1

আপনি বিস্তৃত অবজেক্ট তৈরির জন্য রিসোর্স-ফ্রি ক্যাচিং প্রয়োগ করতে দুর্বলতাশ্যাপ ব্যবহার করতে পারেন।

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


আপনি দুর্বলতা নয়, সফটরিফারেন্সের কথা বলছেন। দেখুন stackoverflow.com/a/155492/632951
Pacerier
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.