গো জাভা একই সূক্ষ্ম মেমরি-ফাঁসের বিষয়?


91

এখানে তথ্যগুলি:

  • ভাষা গোতে একটি আবর্জনা সংগ্রহকারী রয়েছে।

  • জাভাতে আবর্জনা সংগ্রহ রয়েছে

  • অনেক জাভা প্রোগ্রামের (সূক্ষ্ম বা না) মেমরি ফাঁস রয়েছে

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

তাই আমি ভাবছি: গোতে লিখিত প্রোগ্রামগুলি কি জাভা প্রদর্শনীতে লিখিত কিছু প্রোগ্রামের মতো একইভাবে (সূক্ষ্ম বা না) মেমরি ফাঁস হবে?


29
"জাভা প্রোগ্রামগুলির অনেকগুলি (সূক্ষ্ম বা না) মেমরি ফাঁস" আপনার কাছে এই "সত্য" এর কোনও প্রমাণ আছে বা এটি কেবল একটি কথা বলার বিষয়।
পিটার লরি

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

14
: এখানে মেমরি তথ্য ফাঁসের আমি সম্পর্কে কথা ছিল হয় (+200 upvotes, +150 upvotes সঙ্গে উত্তর, প্রকৃত জাভা মেমরি তথ্য ফাঁসের প্রচুর ব্যাখ্যা) stackoverflow.com/questions/6470651/...
SyntaxT3rr0r

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

6
এই প্রশ্নটি "অনুরাগীবাদ", "কারও বিশ্বাসকে কাঁপানো" এবং এই জাতীয় মন্তব্য সম্পর্কে নাটক এবং মন্তব্য ছাড়াই করতে পারে। এসপি যেহেতু পুরো আলোচনাটি " memory leakআপনার চেয়ে আমার সংজ্ঞাটি আরও ভাল " এ উত্থিত হয় ।
এলএএফকে বলছে মনিকা পুনরায় ইনস্টল করুন 4'17

উত্তর:


44

আপনি এখানে বিভিন্ন ধরণের মেমরি ফাঁসকে বিভ্রান্ত করছেন।

জঘন্য, সুস্পষ্ট-মেমরি-পরিচালনা ভিত্তিক মেমরি ফাঁস জাভাতে (বা অন্য কোনও জিসি ভিত্তিক ভাষা) চলে গেছে। এই ফাঁসগুলি অব্যবহৃত হিসাবে চিহ্নিত না করে মেমরির অংশগুলিতে সম্পূর্ণ অ্যাক্সেস হারিয়ে ফেলেছে are

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


23
মেমরি ফাঁস কেবল তখনই যখন আপনি স্মৃতি মুক্ত করতে ভুলে যান। জাভাতে এটি ঘটে যখন আপনি নালার জন্য রেফারেন্স সেট করতে ভুলে যান। সি ++ এ আপনি যদি ফ্রি কল করতে ভুলে যান তবে তা ঘটে। উভয়ই বৈধ মেমরি ফাঁসের মামলা। এবং মৌলিক সমস্যাটি একই, আপনি আউটআফমেমরি ত্রুটিটি শেষ পর্যন্ত ক্রাশ না হওয়া পর্যন্ত আপনি প্রোগ্রামটি আরও বেশি বেশি মেমরি গ্রাস করেন।
নিকোলাস বসকেট

4
যদিও এটি সত্য যে কোনও ভাষা প্রোগ্রামারকে এ জাতীয় যুক্তি ত্রুটি তৈরি করতে বাধা দিতে পারে না, এটিও সত্য যে জাভা এসডিকে নিজেই এই জাতীয় কিছু ত্রুটি উপস্থিত রয়েছে (উদাহরণস্বরূপ, java.util.logging.Levelযার মধ্যে একটি ব্যক্তিগত স্ট্যাটিক রয়েছে যার মধ্যে এই ArrayListজাতীয় সমস্ত অবজেক্টগুলি নির্মিত হয়েছে) নির্মাণ উপর স্থাপন করা, এবং যা থেকে তারা সরে না হয়), যা যখন কিছু অন্যান্য ভাষা যেমন সংক্রান্ত ত্রুটিগুলি ধারণ করে না চেয়ে জাভা প্রোগ্রামিং পাওয়া কঠিন হয়ে পড়ে তাদের এড়ানোর করে তোলে
জুলে

7
আমি মনে করি যে লিখিত লিখিত প্রশ্নের গৃহীত উত্তরের মতো অপ্রচলিত বস্তুর মেমরি ফাঁস সম্পর্কে ওপি জিজ্ঞাসা করেছিল। মেমরি ফুটো যা থ্রেডগুলি থেকে শ্রেণি লোডের কারণে হয়। -1
qbt937

4
এগুলিও অনুমেয় যে স্থির বিশ্লেষণগুলি নির্ধারণ করতে পারে যে উল্লেখগুলি তাদের কার্যকর জীবনকাল ধরে অব্যাহত রয়েছে কিনা - কোনও মন-পাঠের প্রয়োজন নেই।
কাইল স্ট্র্যান্ড

4
@ আম্রিত নো, আবর্জনা সংগ্রহকারী মেমরি সংগ্রহ করে আপনার আর কোনও উল্লেখ নেই। আপনার কাছে এখনও উল্লেখ রয়েছে এমন কিছু সরিয়ে ফেলা ঠিক আছে কিনা তা জানার কোনও উপায় নেই।
রাফেল স্মিটজ

19

এটি খুব সম্ভব যে গো প্রোগ্রামগুলি মেমরি ফাঁস প্রদর্শন করবে। গো এর বর্তমান বাস্তবায়নে একটি সাধারণ মার্ক-ও-সুইপ আবর্জনা সংগ্রহকারী রয়েছে। এটি কেবলমাত্র একটি অস্থায়ী সমাধান হিসাবে চিহ্নিত এবং দীর্ঘমেয়াদী আবর্জনা সংগ্রহকারী হিসাবে নয়। আরও তথ্যের জন্য এই পৃষ্ঠাটি দেখুন । শিরোনামের নীচে দেখুন Go Garbage Collector। আপনি যদি প্রবণতা বোধ করেন তবে সেই পৃষ্ঠায় এমনকি বর্তমান সংস্করণের কোডের একটি লিঙ্ক রয়েছে।


4
জাভাতে চিহ্ন এবং সুইপ সংগ্রহকারীর অন্যতম সমস্যা হ'ল মেমরি ফ্রিজমেন্টেশন। প্রযুক্তিগতভাবে মেমরি না হলেও এটি অ্যাপ্লিকেশনটিতে উপলব্ধ স্মৃতিশক্তি হ্রাস হতে পারে।
পিটার লরি

9

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

"ভাষাগুলি মেমরি ফাঁস দেয় না, প্রোগ্রামার মেমরি ফাঁস দেয়"।


8

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

আবর্জনা সংগ্রহ প্রোগ্রামার থেকে কিছু বোঝা নেয় তবে এটি সম্পূর্ণভাবে ফাঁস ঠেকায় না।


4
আমি জানি আমি জানি. আমি জাভাতে থাকা কান্ডা সূক্ষ্ম মেমরি-ফাঁস সম্পর্কে বিশেষভাবে কথা বলছি যা এর শুরুতে এমন একটি ভাষা হিসাবে বাজারজাত করেছিল যেখানে মেমরি ফাঁসের উপস্থিতি নেই জিসিকে ধন্যবাদ জানাতে
SyntaxT3rr0r

4
দুঃখিত এটি পরিষ্কার ছিল না। আপনি বলেছিলেন "প্রচুর জাভা প্রোগ্রামগুলিতে (সূক্ষ্ম বা না) মেমরি ফাঁস হয়"।
জেজেড

3

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

সুতরাং মেমরি ফাঁস ইস্যুটি প্রোগ্রামিং ভাষা নির্দিষ্ট নয়, কোনও কারণ নেই যে নিজের দ্বারা জাভা থেকে ভাল বা খারাপ হওয়া উচিত।


4
আমি পুরোপুরি একমত হই না মেমরি ফাঁস এই কারণে যে জাভা পায়ে একটি-স্ব গুলি করা সম্ভব করে তোলে এবং এটি প্রয়োজনীয়ভাবে গ্রন্থাগার বাগের সাথে সম্পর্কিত নয়। প্রচুর প্রোগ্রামার প্রোগ্রাম লিখেছেন যা আস্তে আস্তে কিন্তু অবশ্যই জাভাতে মেমরি ফাঁস করে এবং এটি তাদের নিজস্ব ফল্ট, লাইব্রেরির ত্রুটি নয়। এছাড়াও, যদি স্পষ্টভাবে জাভা জিসি একটি সময় / সম্ভাব্য-ফাঁস ট্রেডঅফ করে দিচ্ছে, তবে কি একই ট্রেডঅফস তৈরি করা যাবে?
SyntaxT3rr0r

4
এবং প্রশ্নটি আসলেই নয় "আমি এই জাতীয় লুপগুলি সন্ধান করতে কত সময় ব্যয় করতে চাই?" প্রশ্নটি হ'ল "চশমাগুলি গো জিসি এই জাতীয় লুপগুলিতে ব্যয় করতে কত সময় নির্দেশ দেয়" , যা আইএমএইচও একটি আকর্ষণীয় প্রশ্ন।
SyntaxT3rr0r

16
চক্রীয় রেফারেন্স চেইনগুলি জাভাতে আবর্জনা সংগ্রহ প্রতিরোধ করে না।
অ্যান্ডি টমাস 16
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.