এই জাভা 9 এর দ্বারা নিখুঁত হতে হবে! পরিবর্তে
ব্যবহার java.util.Cleaner
করুন! (বা sun.misc.Cleaner
পুরানো জেআরই-তে)
মূল পোস্ট:
আমি দেখতে পেলাম যে ফ্যান্টম রেফারেন্সগুলির ব্যবহারে চূড়ান্তকরণ পদ্ধতি হিসাবে প্রায় একই পরিমাণে বিপদ রয়েছে (তবে এটি ঠিক হয়ে গেলে কয়েকটি সমস্যা)। আমি জাভা ৮ এর জন্য একটি ছোট সমাধান (ফ্যান্টম রেফারেন্সগুলি ব্যবহার করার জন্য একটি খুব ছোট কাঠামো) লিখেছি It এটি বস্তুটি সরিয়ে দেওয়ার পরে কলব্যাক চালানোর জন্য ল্যাম্বডা এক্সপ্রেশন ব্যবহার করতে দেয়। আপনি অভ্যন্তরীণ সংস্থানগুলির জন্য কলব্যাকগুলি নিবন্ধন করতে পারেন যা বন্ধ হওয়া উচিত। এটির সাথে আমি এমন একটি সমাধান খুঁজে পেয়েছি যা আমার পক্ষে কার্যকর হয় কারণ এটি এটিকে আরও ব্যবহারিক করে তোলে।
https://github.com/claudemartin/java-cleanup
কলব্যাকটি কীভাবে নিবন্ধিত হয়েছে তা দেখানোর জন্য এখানে একটি ছোট উদাহরণ রয়েছে:
class Foo implements Cleanup {
public Foo() {
this.registerCleanup((value) -> {
try {
value.close();
} catch (Exception e) {
logger.warning("closing resource failed", e);
}
}, this.resource);
}
এবং তারপরে উপরের মতো একই কাজ করে অটো-বন্ধ করার জন্য আরও সহজ পদ্ধতি রয়েছে:
this.registerAutoClose(this.resource);
আপনার প্রশ্নের উত্তর দিতে:
[তাহলে এর ব্যবহার কী]
আপনি এমন কিছু পরিষ্কার করতে পারবেন না যা বিদ্যমান নেই। তবে এর এমন সংস্থান থাকতে পারে যা এখনও বিদ্যমান আছে এবং পরিষ্কার করা দরকার যাতে সেগুলি সরানো যায়।
তবে এই ধারণা / শ্রেণীর ব্যবহার কী?
এটি ডিবাগিং / লগিং ব্যতীত অন্য কোনও প্রভাব দিয়ে কিছু করার প্রয়োজন হয় না। বা সম্ভবত পরিসংখ্যান জন্য। আমি এটিকে আরও জিসির বিজ্ঞপ্তি পরিষেবার মতো দেখছি। আপনি এটি সামগ্রিক ডেটা অপসারণের জন্য এটি ব্যবহার করতে চাইতে পারেন যা একবার অবজেক্টটি অপসারণের পরে অপ্রাসঙ্গিক হয়ে যায় (তবে এর জন্য সম্ভবত আরও ভাল সমাধান রয়েছে)। উদাহরণস্বরূপ প্রায়শই ডাটাবেস সংযোগগুলি বন্ধ থাকার কথা উল্লেখ করা হয়, তবে আপনি লেনদেনের সাথে কাজ করতে পারেন না বলে এটি কীভাবে ভাল ধারণা তা আমি দেখতে পাই না। একটি অ্যাপ্লিকেশন কাঠামো এটির জন্য আরও ভাল সমাধান সরবরাহ করবে।
আপনি কি কখনও আপনার প্রকল্পের কোনওটিতে এটি ব্যবহার করেছেন, অথবা আমাদের যেখানে এটি ব্যবহার করা উচিত তার কোনও উদাহরণ রয়েছে? অথবা এই ধারণাটি কেবলমাত্র সাক্ষাত্কারের দৃষ্টিভঙ্গির জন্য তৈরি করা হয়েছে;)
আমি এটি বেশিরভাগই কেবল লগিংয়ের জন্য ব্যবহার করি। সুতরাং আমি সরানো উপাদানগুলির সন্ধান করতে এবং জিসি কীভাবে কাজ করে তা দেখতে এবং এটি টুইট করা যেতে পারে। আমি এইভাবে কোনও সমালোচনামূলক কোড চালাব না। যদি কিছু বন্ধ করার দরকার হয় তবে এটি চেষ্টা-সহ-সংস্থান-বিবৃতিতে করা উচিত। এবং আমি এটি ইউনিট পরীক্ষায় ব্যবহার করি, যাতে আমার কোনও স্মৃতি ফাঁস না হয় তা নিশ্চিত করে। জোন্টেজ যেমন করে তেমনভাবে। তবে আমার সমাধানটি কিছুটা সাধারণ।