প্রোগ্রামিং এ মেমরি পরিচালনা কি অপ্রাসঙ্গিক উদ্বেগ হয়ে উঠছে?


38

পটভূমি
আমি একটি পুরানো (তবে দুর্দান্ত) সাইটটি পুনরায় ঘুরে দেখলাম যা আমি যুগ যুগ ধরে করতে পারি নি - আলিওথ ল্যাঙ্গুয়েজ শ্যুটআউট ( http://benchmarkgame.alioth.debian.org/ )।

আমি বেশ কয়েক বছর আগে সি / সি ++ এ প্রোগ্রামিং শুরু করেছি, তবে তখন থেকে আমি যে প্রকল্পগুলিতে জড়িত ছিল সেগুলিতে ভাষার প্রতিবন্ধকতার কারণে জাভাতে প্রায় একচেটিয়াভাবে কাজ করে যাচ্ছি figures পরিসংখ্যানগুলি মনে না রেখে, আমি দেখতে চেয়েছিলাম, জাভা কতটা ভাল ছিল? রিসোর্স ব্যবহারের ক্ষেত্রে সি / সি ++ এর বিপরীতে প্রমাণিত।

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

আসল ইট ছিল মেমরি বরাদ্দ - সবচেয়ে খারাপভাবে, জাভা বরাদ্দ:

  • সি এর চেয়ে মজাদার 52x বেশি স্মৃতি
  • এবং সি ++ এর চেয়ে 25x বেশি।

52x স্মৃতি ... একেবারে বাজে, তাই না? ... অথবা এটা? স্মৃতি এখন তুলনামূলকভাবে সস্তা।

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

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


32
ভুলে যাবেন না যে কেবল ছোট বেনমার্কের জন্য জাভা সি এর চেয়ে 52x বেশি মেমরি বরাদ্দ করেছে, এর অর্থ এই নয় যে এটি একটি বৃহত অ্যাপ্লিকেশনের জন্য 52x বেশি মেমরি ব্যবহার করবে। সেই মেমরির সিংহের অংশটি JVM দ্বারা প্রয়োজনীয় একটি নির্দিষ্ট পরিমাণে হবে এবং আপনার অ্যাপ্লিকেশনটি যত বড় হবে, সেই অংশটি তত কম তাত্পর্যপূর্ণ হয়ে উঠবে।
কারসন 63000

4
যদি হ্যাঁ, মোবাইল ডেভলপমেন্ট অপ্রাসঙ্গিক হয়।
জেফো

3
প্রশ্নটি জাভা বেঞ্চমার্ক বনাম সি / সি ++ কতটা খারাপ এবং দুটি ভাষার মধ্যে নির্বাচনের ক্ষেত্রে এটির অর্থ কী does আমি এটিকে বিষয়বস্তু হিসাবে দেখছি, সমস্ত প্রোগ্রামারদের সাথে প্রাসঙ্গিক, পরিষ্কার, মনোনিবেশ করা এবং এর বর্তমান ফর্মটিতে যুক্তিসঙ্গত উত্তর দিতে সক্ষম। আমি আবার খুলতে ভোট দিয়েছি।
গ্লেনপিটারসন

সর্বাধিক পারফরম্যান্স সমস্যাগুলি ডিভাইস স্তরের নয়, নকশার স্তরে তৈরি এবং স্থির হয়। কিছু সমস্যাগুলির জন্য 1 মিমি গ্রানুলারিটি প্রয়োজন এবং এর জন্য সি / সি ++ প্রয়োজন। আপনার যদি 10 মিমি পছন্দ মতো অবকাশ থাকে তবে স্ক্যালা বা জাভা একটি ভাল বিকল্প। গেমগুলির জন্য বেশিরভাগ ইনপুট নিয়ন্ত্রণকারীরা 50-100 মিমি পর্যায়ে কাজ করে। অনেক লোক আজ এক ভাষায় সমালোচনা বিভাগ এবং অন্য প্রোগ্রামে বাকী অংশ লেখেন।
গ্লেনপিটারসন

4
এই পরীক্ষায় "সি ++ এর চেয়ে 25x বেশি" দেখার সময় রানটাইমের ধ্রুবক সংযোজন (প্রায় 13 এমবি) বিবেচনায় নেওয়া উচিত। সমস্যাটি বড় হওয়ার সাথে সাথে রানটাইম মেমরির প্রয়োজনীয়তা পুরো প্রোগ্রামের শতাংশ হিসাবে কম হয়ে যায়। যেখানে সি ++ মেমরির ব্যবহার 1 এমবি এর চেয়ে কম, আপনি যদি জাভা মেমরির ব্যবহার থেকে সি ++ মেমরির ব্যবহার বিয়োগ করেন তবে আপনি মোটামুটি ধ্রুবক মান পাবেন।

উত্তর:


34

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

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

এটা কি মাথা ব্যথা বেশি? অবশ্যই তবে আপনার যদি সুনির্দিষ্ট নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনি এটি সহ্য করুন।


14
-1 "... একটি খেলায় আক্ষরিকভাবে প্রাণঘাতী ..." - আমার জীবনের কাজটি জীবনের সুরক্ষার মতো একটি সুরক্ষা জটিল ব্যবস্থা। গেম সফ্টওয়্যারটিতে সবচেয়ে খারাপটি ঘটে যা হ'ল লেখক হুড়োহুড়ি করায় কারণ এর কৃপণতা এবং কেউ এটিকে কিনে না। এটি একটি তফাত যা তুচ্ছ করা উচিত নয়।
mattnz

4
@mattz আমার পক্ষ থেকে শব্দগুলির দরিদ্র পছন্দ choice এটা ঠিক করা হয়েছে। কিছুতেই তুচ্ছ করা আমার উদ্দেশ্য ছিল না।
বিশ্ব প্রকৌশলী

19
@ ম্যাট্নজ: আপনি যদি গেমগুলির সাথে পরিচিত হন তবে তাঁর স্পষ্টতই বোঝা যাচ্ছে যে এটি আপনার চরিত্রের পক্ষে মারাত্মক হতে পারে , এটি একটি সম্পূর্ণ সত্য বিবৃতি।
ম্যাসন হুইলারের

8
+1 কারণ উত্তরদাতাদের হীরা রয়েছে তাই উত্তরটি সঠিক হতে হবে।
PSr

8
রিয়েলটাইম আবর্জনা সংগ্রহকারীরা যুগে যুগে বিদ্যমান।
জার্গ ডব্লু মিটাগ

30

আসল ইট ছিল মেমরির বরাদ্দ - সবচেয়ে খারাপভাবে, জাভা সি এর চেয়ে আরও বেশি 52x মেমরি এবং সি ++ এর চেয়ে 25x বেশি বরাদ্দ করে।

আপনি নিজের প্রশ্নটি ভিত্তিক সংখ্যাগুলি বুঝতে পারছেন ?

  • কত স্মৃতি বরাদ্দ ছিল?
  • প্রোগ্রামগুলি কি করছিল?

যখন এই জাভা এবং সি প্রোগ্রামগুলির মধ্যে একটি বড় বৈষম্য দেখা দেয়, তখন এটি বেশিরভাগ ডিফল্ট জেভিএম মেমরির বরাদ্দ বনাম যা কিছু লিবিসি প্রয়োজন:

  • এন-বডি
    জাভা প্রোগ্রাম 13,996KB :: সি প্রোগ্রাম 320KB :: ফ্রি পাস্কাল 8KB

মেমরি বরাদ্দ হওয়া প্রয়োজন এমন কাজগুলি দেখুন (বা মাল্টিকোর প্রোগ্রামগুলি থেকে ফলাফল সংগ্রহ করতে অতিরিক্ত বাফার ব্যবহার করুন):

  • ম্যান্ডেলব্রোট
    জাভা প্রোগ্রাম 67 , 880 কেবি :: সি প্রোগ্রাম 30 , 444KB

  • কে-নিউক্লিওটাইড
    জাভা প্রোগ্রাম 494 , 040KB :: সি প্রোগ্রাম 153 , 452KB

  • বিপরীত পরিপূরক
    জাভা প্রোগ্রাম 511 , 484KB :: সি প্রোগ্রাম 248 , 632KB

  • regex-dna
    জাভা প্রোগ্রাম 557 , 080KB :: সি প্রোগ্রাম 289 , 088KB

  • বাইনারি-ট্রি
    জাভা প্রোগ্রাম 506 , 592KB :: সি প্রোগ্রাম 99 , 448KB

... আজ সাধারণ উদ্দেশ্যে ভাষা বেছে নেওয়ার সময় কি স্মৃতি ব্যবহারের উদ্বেগ হওয়া উচিত?

এটা তো নির্ভর করে কিনা নির্দিষ্ট ব্যবহার, আপনার জন্য নির্দিষ্ট সমাধানে পদ্ধতির নির্দিষ্ট আপনি সমাধান করতে প্রয়োজন সমস্যা, দ্বারা সীমাবদ্ধ করা হবে না নির্দিষ্ট উপলব্ধ মেমরি সীমা নির্দিষ্ট করে ব্যবহার করা হবে প্ল্যাটফর্ম।


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

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

17

সবকিছুর মতো এটিও বাণিজ্য-বন্ধ।

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


8

এটি বিভিন্ন কারণের উপর নির্ভর করে, বিশেষত আপনি যে স্কেলটিতে কাজ করছেন।

কেবল যুক্তির খাতিরে, আসুন মেমরির 30x পার্থক্য এবং সিপিইউ ব্যবহারের 2x অনুমান করি।

আপনি যদি এমন একটি ইন্টারেক্টিভ প্রোগ্রামের সাথে লেনদেন করছেন যা সিতে লেখা হয় 10 মেগাবাইট মেমরি এবং 1 মিলিসেকেন্ড সিপিইউ লাগে তবে এটি প্রায় অসম্পূর্ণ - মেমরির 300 মেগাবাইট এবং 2 মিলি সেকেন্ড কার্যকরভাবে সাধারণত একটি ডেস্কটপে সম্পূর্ণ অপ্রাসঙ্গিক হয়, এমনকি ফোন বা ট্যাবলেটেও অনেক কিছু বোঝার সম্ভাবনা নেই।

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

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


2
স্কেল লক্ষ করার জন্য +1 এই নিবন্ধটি একবার দেখুন বড় পরিমাণে রিসোর্স ম্যানেজমেন্টকে সত্যিকার অর্থেই আপেকে উঠুন।
গাই কোডার

6

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

এটি যদি আপনার কোড হয় তবে আপনি কিছু ভুল করছেন:

static List<string> Cache;

...
Cache.Add(foo); //and then never remove anything from Cache

আবর্জনা সংগ্রহ জাদুকরভাবে জানতে পারে না আপনি আর কখনও কোনও উল্লেখ ব্যবহার করতে পারবেন না যদি না আপনি এটি পুনরায় ব্যবহার করতে না পারেন, অর্থাত্ কাজ করে Cache=nullআপনি কার্যকরভাবে আবর্জনা সংগ্রহকারীকে সতর্ক করেন যে "আরে আমি সক্ষম হব না এটিকে আর অ্যাক্সেস করুন you আপনি যা চান তা করুন "

এটি এর চেয়ে জটিল, তবে রেফারেন্স লিকগুলি যেমন প্রথাগত মেমরি ফাঁসের চেয়ে ক্ষতিকারক না হয় তেমন harmful

এমন কিছু জায়গা রয়েছে যেখানে আপনি কোনও আবর্জনা সংগ্রহকারীকে ফিট করতে পারবেন না। উদাহরণস্বরূপ, এটিটিআইএনএইচটি হ'ল একটি মাইক্রোকন্ট্রোলার code১২ বাইট কোড রম, এবং র‌্যামের 32 বাইট। শুভকামনা! এটি একটি চরম, এবং সম্ভবত সমাবেশ ব্যতীত অন্য কোনও প্রোগ্রাম করা হবে না, কিন্তু এখনও still অন্যান্য ক্ষেত্রে আপনার মেমরি 1M হতে পারে। অবশ্যই, আপনি কোনও আবর্জনা সংগ্রহকারীকে ফিট করতে পারেন, তবে যদি প্রসেসরটি খুব ধীর হয় (হয় সীমাবদ্ধতা দ্বারা, বা ব্যাটারি সংরক্ষণের জন্য), তবে আপনি কোনও আবর্জনা সংগ্রাহক ব্যবহার করতে চাইছেন না কারণ এটি কোনও প্রোগ্রামার কী জানতে পারে তার জন্য এটি ব্যয়বহুল ট্র্যাকিং কারণ ।

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

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


3

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

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


4
এই মনোভাবটি হ'ল কীভাবে আমরা অবিশ্বাস্যরকম ধীর কম্পিউটারগুলিতে পুষ্পিত এন্টারপ্রাইজ সফ্টওয়্যার দিয়ে শেষ করি যা পেজিং করে। সবাই বলে 'অবশ্যই আমার অ্যাপ্লিকেশনটি আরও বেশি মেমরি নিয়েছে, তবে কে যত্নশীল, এটি কার্যত নিখরচায়!' এবং তারপরে আপনি 10 বছর আগে 512 এমবি র‌্যাম মেশিনের চেয়ে 4 গিগাবাইট র‌্যাম মেশিনটি ধীরগতিতে চালিত মেমরি-ক্ষুধার্ত অ্যাপ্লিকেশনগুলির সম্পূর্ণ স্ট্যাকের সাথে শেষ করেন।
মিঃফক্স

@ এমআরফক্স আসলে এন্টারপ্রাইজ সফ্টওয়্যারটির সমস্যা হ'ল যে লোকেরা এটি ব্যবহারের সিদ্ধান্ত নেয় তারা এর দ্বারা ক্ষতিগ্রস্থ লোক নয়। দেখুন lists.canonical.org/pipermail/kragen-tol/2005-April/000772.html কেন এটা নষ্ট হয়ে গেছে একটি চমৎকার বর্ণনার জন্য। বাকী হিসাবে, আপনি কি আমার নির্দেশকটি মিস করেছেন যে মেমরির ব্যবহার সম্পর্কে চিন্তা করা কখনও কখনও প্রয়োজন?
btilly

3

"বিগ ডেটা" মেমরি ম্যানেজমেন্টের সাথে মোকাবিলা করা লোকদের জন্য এখনও একটি বিশাল সমস্যা। জ্যোতির্বিজ্ঞান, পদার্থবিজ্ঞান, বায়োইনফরম্যাটিকস, মেশিন লার্নিং ইত্যাদির প্রোগ্রামগুলিতে সকলকে মাল্টি-গিগাবিট ডেটাসেটগুলি মোকাবেলা করতে হয় এবং প্রাসঙ্গিক অংশগুলি স্মৃতিতে রাখতে পারলে প্রোগ্রামগুলি আরও দ্রুত চালিত হয়। এমনকি 128 গিগাবাইট র‍্যাম সহ একটি মেশিনে চালানো সমস্যার সমাধান করে না।

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


1

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

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

তবে অবশ্যই যদি আপনি কেবলমাত্র কয়েকটি-কে সংস্করণ প্রয়োজন বোধ করার জন্য 2 বছরের মধ্যে কিছু অতিরিক্ত মেগাবাইট ব্যয়ে 2 সপ্তাহের মধ্যে অ্যাপটি সম্পন্ন করতে পারেন তবে কয়েক মেগা কীভাবে তুলনা করে তা বিবেচনা করার মতো ( আমি অনুমান করছি) এত ঝাঁকুনির ধারণাটিতে উপহাস করার আগে গড় ব্যবহারকারীদের মেশিনে 4-12 জিগ।

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


0

প্রোগ্রামিং এ মেমরি পরিচালনা কি অপ্রাসঙ্গিক উদ্বেগ হয়ে উঠছে?

মেমরি পরিচালনা (বা নিয়ন্ত্রণ) হ'ল আমি সি এবং সি ++ ব্যবহার করছি এমন প্রাথমিক কারণ।

স্মৃতি এখন তুলনামূলকভাবে সস্তা।

দ্রুত স্মৃতি নয়। আমরা এখনও অল্প সংখ্যক নিবন্ধকের দিকে নজর রাখছি, আই 7-এ এল 1 এর জন্য 32 কেবি ডেটা ক্যাশে, এল 2 এর জন্য 256 কেবি এবং এল 3 / কোরের জন্য 2 এমবি জাতীয় কিছু। বলেছিল:

যদি আমরা ওয়ার্কিং মেমোরির (যেমন এম্বেড হওয়া সিস্টেম এবং এর মতো) কঠোর সীমাবদ্ধতার সাথে লক্ষ্য প্ল্যাটফর্মের ক্ষেত্রে কথা না বলি, তবে আজ সাধারণ উদ্দেশ্য ভাষা বেছে নেওয়ার সময় মেমরির ব্যবহার কি উদ্বেগজনক হওয়া উচিত?

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

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

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

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

এখানে চিত্র বর্ণনা লিখুন

উপরেরটি আমার পরিবর্তনীয় সংস্করণটির চেয়ে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে উপস্থাপিত হয়ে এটি একটি জালের ডেটা কাঠামোর উপস্থাপনা পরীক্ষা করে, তবে তার পাশাপাশি, আমি অর্ধেক ডেটাতেও এমন ফ্রেম রেট অর্জনের জন্য সংগ্রাম করে যাচ্ছিলাম (স্বীকৃতভাবে হার্ডওয়্যার আমার সংগ্রামের পরেও দ্রুত গতি পেয়েছে) ) কারণ আমি জাল ডেটার জন্য ক্যাশে মিস করা এবং মেমরির ব্যবহার হ্রাস করতে পারি না didn't মেশস হ'ল কয়েকটি কৌশলগত ডেটা স্ট্রাকচার যা আমি এই বিষয়ে মোকাবিলা করেছি কারণ তারা এতগুলি আন্তঃনির্ভরশীল ডেটা সংরক্ষণ করে যেগুলি বহুভুজ, প্রান্ত, অনুভূমিকের মতো সিঙ্কে থাকতে হয়, যতগুলি টেক্সচার মানচিত্র ব্যবহারকারী সংযুক্ত করতে চায়, হাড়ের ওজন, রঙের মানচিত্র, নির্বাচনের সেট, আকারের লক্ষ্যমাত্রা, প্রান্তের ওজন, বহুভুজ উপকরণ ইত্যাদি ইত্যাদি ..

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

এখানে 8 মিলিয়ন কোয়াড্রাঙ্গলস এবং একটি জিএফ 8400 সহ আই 3 এর উপর একটি মাল্টিয়ার্স মহকুমা স্কিমের মিউটেটেবল প্রোটোটাইপ রয়েছে (এটি কয়েক বছর আগে থেকেই ছিল)। এটি আমার অপরিবর্তনীয় সংস্করণের চেয়ে দ্রুত তবে উত্পাদনে ব্যবহার করা হয়নি কারণ আমি অপরিবর্তনীয় সংস্করণটি বজায় রাখা এত সহজ খুঁজে পেয়েছি এবং পারফরম্যান্সের আঘাতটি খুব খারাপ নয় isn't নোট করুন যে তারের ফ্রেমটি দিকগুলি নির্দেশ করে না, তবে প্যাচগুলি (তারগুলি আসলে বক্ররেখা হয়, অন্যথায় পুরো জাল শক্ত কালো হবে), যদিও একটি দিকের সমস্ত পয়েন্ট ব্রাশ দ্বারা সংশোধিত হয়।

এখানে চিত্র বর্ণনা লিখুন

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

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

সুতরাং মেমরি পরিচালনা / নিয়ন্ত্রণ (বা এর অভাব) আসলে আমার ক্ষেত্রে সবচেয়ে বেশি কার্যকর যে কোন ভাষা আমাকে সমস্যাগুলি মোকাবেলায় মঞ্জুরি দেয় তা চয়ন করার ক্ষেত্রে আমার ক্ষেত্রে একটি প্রধান কারণ। আমি অবশ্যই আমার কোডের অংশটি লিখি যা পারফরম্যান্স-সমালোচনা নয় এবং এর জন্য আমি লুয়া ব্যবহার করি যা সি থেকে এম্বেড করা বেশ সহজ use

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