আমি যখন কোনও অবজেক্ট তৈরি করি, তা কি তাত্পর্যপূর্ণ মেমরির ক্ষেত্রে উভয় ক্ষেত্রে বরাদ্দ করা হয় উদাহরণ ক্ষেত্র এবং পদ্ধতি বা কেবলমাত্র ক্ষেত্রগুলিতে


14

আমার নিচের ক্লাস আছে

class Student{

int rollNumber;
int marks;

public void setResult(int rollNumber, int marks){

    this.rollNumber=rollNumber;
    this.marks=marks;   
}

public void displayResult(){

    System.out.println("Roll Number= "+this.rollNumber+"   Marks= "+this.marks);

}
}

এখন আমি টাইপ স্টুডেন্টের দুটি বিষয় তৈরি করলাম

Student s1=new Student();
Student s2=new Student();

উদাহরণস্বরূপ ক্ষেত্রগুলির জন্য এখন দুটি পৃথক মেমরি সেট করা হয়। এখন আমার প্রশ্ন হল মেমরি পদ্ধতি (জন্য বরাদ্দ করা আছে কিনা setResultএবং displayResult) দুইবার বা একবার?

দয়া করে নীচের চিত্রটি দেখুন এবং আপনি কি আমাকে এই চিত্রটি সঠিক তথ্য দেয় তা বলতে সাহায্য করতে পারেন?

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


1
আপনার গবেষণা ভাগ করে নেওয়া প্রত্যেককে সহায়তা করে । আপনি কী চেষ্টা করেছেন এবং কেন এটি আপনার প্রয়োজনীয়তা মেটেনি তা আমাদের বলুন। এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে। এছাড়াও কীভাবে জিজ্ঞাসা করবেন দেখুন
gnat

3
আমি জাভা শিখছি ... এবং সমস্ত উপকরণগুলিতে তারা কেবল বলেছে যে যখনই আমরা কোনও বস্তু তৈরি করি তখন সমস্ত দৃষ্টিকোণ ক্ষেত্রগুলিতে একটি নতুন স্মৃতি বরাদ্দ করা হয়..কিন্তু কোনও উপকরণই বলেছিল না যে পদ্ধতিগুলির জন্য নতুন মেমরি বরাদ্দ করা হবে বা না
হরিশ_এন

উত্তর:


13

পদ্ধতির কোডটি Class(আরও সংক্ষেপে Class<Student>) এর একটি অংশ এবং ক্লাসটি প্রথম লোড হওয়ার পরে এটি মেমরিতে লোড হয়।

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

আপনার প্রশ্ন অনুসারে, এখন এটি স্পষ্ট হওয়া উচিত যে চিত্র বিটি সঠিক (যদিও আপনি প্রকৃতপক্ষে পদ্ধতিটি কল করলে কী ঘটে তা প্রতিফলিত হয় না)।


ঠিক আছে. আমি এখন 90% পরিষ্কার করছি .... তবে একটি ছোট সন্দেহ .. ধরুন আমি যদি 10 ধরণের শিক্ষার্থী তৈরি করি তবে ক্লাস স্টুডেন্টের উপস্থিত পদ্ধতিগুলিতে কেবল 1 সেট তাজা মেমরি বরাদ্দ করা হয়েছে যেখানে 10 সেট তাজা মেমরির 10 টি অবজেক্টের জন্য ইনস্ট্যান্স ভেরিয়েবল সংরক্ষণের জন্য বরাদ্দ..আমি ঠিক?
হরিশ_এন

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

আরও একটি বিষয় ... আমি জাভা মাথায় রেখে প্রশ্ন জিজ্ঞাসা করেছি ....
জাভাতেও

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

6

ইনস্ট্যান্ট ক্ষেত্রগুলি (সম্পত্তি ব্যাকিং ক্ষেত্র সহ) এন-অবজেক্টগুলির জন্য এন-অনুলিপিগুলি পায়।

স্ট্যাটিক ক্ষেত্রগুলি প্রতি ক্লাসে একক অনুলিপি পায়।

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

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

প্রতিটি মন্তব্য আপডেট করুন:

জেভিএম স্ট্যান্ডার্ডের এই কথাটি আছে:

2.5.4। পদ্ধতি অঞ্চল

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

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

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


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

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

জেএলএস এমনকি মোটেও একটি স্তূপ সম্পর্কে কথা বলে না, তাই না? সীমাবদ্ধ স্থির আকারের স্ট্যাক এবং গতিশীল heালার পরিবর্তে গতিশীল স্ট্যাক এবং কোনও গাদা দিয়ে জাভা প্রয়োগ করা পুরোপুরি আইনী। জেএলএস জেভিএম সম্পর্কে কিছুও বলে না, এটি কোনও জাভিএম ছাড়াই জাভা বাস্তবায়নের জন্য পুরোপুরি বৈধ।
জার্গ ডব্লু মিট্টাগ

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

@ জার্গডব্লিউমিত্যাগ - আমি উত্তরে এমন কিছু যুক্ত করেছি যা আমাদের আলোচনার জন্য আগ্রহী হতে পারে। মুল বক্তব্যটি হ'ল আমি প্রচলিত রানটাইম সিস্টেমে ট্র্যাডিশনাল কোড বা পাঠ্য বিভাগের সাথে সাদৃশ্য আঁকছিলাম।
কোডেনহেম

-4

হ্যাপ মেমোরিতে বরাদ্দকৃত বস্তু যখন সমস্ত বস্তুর জন্য স্লট বরাদ্দ করা হয় তখন ভেরিয়েবলটি তৈরি হয়ে যায় এবং ধ্বংস হয় যখন বস্তুটি নষ্ট হয়ে যায় so পদ্ধতি বলা হয়।


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