দুটি পৃথক মেমরি সীমা আছে। ভার্চুয়াল মেমরি সীমা এবং শারীরিক স্মৃতি সীমা।
ভার্চুয়াল মেমরি
ভার্চুয়াল মেমরিটি উপলব্ধ জায়গার আকার এবং লেআউট দ্বারা সীমাবদ্ধ। সাধারণত একেবারে শুরুতে এক্সিকিউটেবল কোড এবং স্ট্যাটিক ডেটা এবং অতীত যা গাদা বাড়ায়, তার শেষে ভাগ করে নেওয়া লাইব্রেরি এবং স্ট্যাক (যা বেশিরভাগ প্ল্যাটফর্মের উপরে নিচে বেড়ে যায়) এর আগে কর্নেল দ্বারা সংরক্ষিত অঞ্চল। এটি বাড়ার জন্য হিপ এবং স্ট্যাকের মুক্ত স্থান দেয়, অন্যান্য অঞ্চল প্রক্রিয়া প্রারম্ভকালে এবং স্থির হিসাবে পরিচিত।
নিখরচায় ভার্চুয়াল মেমরিটি প্রথমে ব্যবহারযোগ্য হিসাবে চিহ্নিত হয় না, তবে বরাদ্দের সময় চিহ্নিত করা হয়। যদিও গাদা সমস্ত উপলব্ধ স্মৃতিতে বৃদ্ধি পেতে পারে, বেশিরভাগ সিস্টেমে স্বয়ংক্রিয়ভাবে স্ট্যাকগুলি বড় হয় না। স্ট্যাকের জন্য আইআইআরসি ডিফল্ট সীমাটি লিনাক্সে 8MiB এবং উইন্ডোজে 1MiB এবং উভয় সিস্টেমে পরিবর্তন করা যেতে পারে। ভার্চুয়াল মেমোরিতে কোনও মেমরি-ম্যাপযুক্ত ফাইল এবং হার্ডওয়্যারও রয়েছে।
স্ট্যাক স্বয়ংক্রিয়ভাবে উত্থিত না হওয়ার একটি কারণ (নির্বিচারে) হ'ল বহু-থ্রেড প্রোগ্রামগুলিতে প্রতিটি থ্রেডের জন্য পৃথক স্ট্যাকের প্রয়োজন হয়, তাই তারা শেষ পর্যন্ত একে অপরের পথে চলে যায়।
32-বিট প্ল্যাটফর্মগুলিতে ভার্চুয়াল মেমরির মোট পরিমাণ 4GiB, লিনাক্স এবং উইন্ডোজ উভয়ই সাধারণত কার্নেলের জন্য সর্বশেষ 1GiB সংরক্ষণ করে, আপনাকে বেশিরভাগ 3GiB ঠিকানার স্থান দেয়। লিনাক্সের একটি বিশেষ সংস্করণ রয়েছে যা আপনাকে পুরো 4GiB দেওয়ার কোনও কিছুই সংরক্ষণ করে না। এটি বৃহত ডাটাবেসের বিরল ক্ষেত্রে যেখানে দরকারী সর্বশেষ 1GiB দিনটি সংরক্ষণ করে, তবে নিয়মিত ব্যবহারের জন্য অতিরিক্ত পৃষ্ঠা সারণী পুনরায় লোডের কারণে এটি কিছুটা ধীর হয়।
-৪-বিট প্ল্যাটফর্মগুলিতে ভার্চুয়াল মেমরিটি 64EiB হয় এবং আপনার এটি সম্পর্কে চিন্তা করতে হবে না।
শারীরিক স্মৃতি
প্রক্রিয়াটি অ্যাক্সেস করার প্রয়োজন হলে শারীরিক মেমরি সাধারণত অপারেটিং সিস্টেম দ্বারা বরাদ্দ করা হয়। একটি প্রক্রিয়া কতটা শারীরিক মেমরি ব্যবহার করছে তা খুব ঝাপসা নম্বর, কারণ কিছু মেমরি প্রক্রিয়াগুলির মধ্যে ভাগ করা হয় (কোড, ভাগ করা লাইব্রেরি এবং অন্য কোনও ম্যাপযুক্ত ফাইল), ফাইলগুলি থেকে ডেটা চাহিদা অনুসারে মেমরিতে লোড হয় এবং যখন মেমরির ঘাটতি থাকে তখন তা ফেলে দেওয়া হয় এবং "অজ্ঞাতনামা" মেমরি (ফাইলগুলির দ্বারা সমর্থিত নয়) অদলবদল হতে পারে।
লিনাক্সে যখন আপনি শারীরিক মেমরি শেষ হয়ে যায় তখন vm.overcommit_memory
সিস্টেম সেটিং এর উপর নির্ভর করে । ডিফল্ট হ'ল ওভার কমিট। আপনি যখন সিস্টেমটিকে মেমরি বরাদ্দ করতে বলেন, এটি আপনাকে কিছু দেয় তবে কেবল ভার্চুয়াল মেমরির বরাদ্দ করে। আপনি যখন মেমরিটিতে আসলে অ্যাক্সেস করেন তখন এটি ব্যবহার করার জন্য কিছু শারীরিক স্মৃতি পাওয়ার চেষ্টা করবে, এমন ডেটা বর্জন করবে যা প্রয়োজনীয়ভাবে পুনরায় পড়া বা জিনিসগুলি অদলবদল করা যায়। যদি এটি আবিষ্কার করে যে এটি কোনও কিছুই মুক্ত করতে পারে না, তবে কেবল প্রক্রিয়াটি অস্তিত্ব থেকে সরিয়ে ফেলবে (প্রতিক্রিয়া করার কোনও উপায় নেই, কারণ সেই প্রতিক্রিয়াটির জন্য আরও বেশি স্মৃতি প্রয়োজন হতে পারে এবং এটি অন্তহীন লুপের দিকে নিয়ে যেতে পারে)।
প্রক্রিয়াগুলি এভাবেই অ্যান্ড্রয়েডে মারা যায় (এটি লিনাক্সও হয়)। প্রক্রিয়াটি কী করছে এবং কতটা পুরানো তার উপর ভিত্তি করে কোন প্রক্রিয়াটি অস্তিত্ব থেকে সরাতে হবে সেই যুক্তির সাথে যুক্তিটি উন্নত হয়েছিল । অ্যান্ড্রয়েড প্রক্রিয়াগুলি কেবল কিছু করা বন্ধ করে দেয় না, তবে ব্যাকগ্রাউন্ডে বসে থাকি এবং যখন নতুনগুলির জন্য মেমরির প্রয়োজন হয় "আউট মেমরি কিলার" তাদের মেরে ফেলবে।