জাভা পদ্ধতি ঘোষণায় সর্বোচ্চ পরামিতি


133

জাভাতে কোনও পদ্ধতিতে সর্বোচ্চ কতগুলি পরামিতি থাকতে পারে এবং কেন?

আমি 64-বিট উইন্ডোজ সিস্টেমে জাভা 1.8 ব্যবহার করছি।

এ সম্পর্কে স্ট্যাকওভারফ্লোতে সমস্ত উত্তর বলে যে কারিগরি সীমাটি 255 পরামিতি কেন তা উল্লেখ না করেই।

সুনির্দিষ্টভাবে বলতে thisগেলে, স্ট্যাটিকের জন্য 255 এবং অ-স্থির জন্য 254 ( এই ক্ষেত্রে 255 তম হবে) পদ্ধতিগুলি।

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

তবে এটি কেবল int4 টি এবং বাইটের জন্য বৈধ ছিল । আমি longপ্যারামিটারগুলির সাথে কিছু পরীক্ষা করেছি এবং আমি কেবলমাত্র সেই ক্ষেত্রে 127 পরামিতি ঘোষণা করতে সক্ষম হয়েছি।

সঙ্গে Stringপ্যারামিটার, মঞ্জুরিপ্রাপ্ত সংখ্যাকে আমি পরীক্ষামূলক থেকে অনুমিত 255 আছে (এটা হতে পারে কারণ রেফারেন্স আকার জাভা 4 বাইট?)।

তবে যেহেতু আমি একটি -৪-বিট সিস্টেম ব্যবহার করছি, রেফারেন্সের আকারটি 8 বাইট প্রশস্ত হওয়া উচিত এবং Stringপরামিতিগুলির সাথে সর্বাধিক অনুমোদিত সংখ্যা 127 হওয়া উচিত, ধরণের অনুরূপ long

এই সীমাটি ঠিক কীভাবে প্রয়োগ করা হয়?

পদ্ধতির স্ট্যাক আকারের সাথে সীমাটির কোনও সম্পর্ক আছে ?

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


39
7, আপনি যদি পঠনযোগ্যতার সাথে পাগল হতে না চান। (আমি জানি আপনি আসলে কী জিজ্ঞাসা করছেন)।
আদম

14
আমি তর্ক করতাম <= 4। আরও কিছু সম্ভবত একটি বস্তু মধ্যে আবৃত করা উচিত।
ভিভিন পালিথ

4
কেন এটি একটি আকর্ষণীয় প্রশ্ন? আপনি যদি কোনও প্রোগ্রাম লিখছেন এবং আপনি এই সীমাতে পৌঁছেছেন তবে আপনার নকশাটি ভুল is আমি বুঝতে পারি না যে এ জাতীয় ব্যবহারিকভাবে অকেজো প্রশ্ন কেন এত বেশি উত্সাহ দেয়?
জেস্পার

20
@ জেস্পার কারণ এটি প্রশ্নগুলি জেভিএমের নির্দিষ্টকরণের জ্ঞানকে প্রশ্ন করে। এই প্রশ্নটি জিজ্ঞাসা করে না "এটি কীভাবে করবেন?" পরিবর্তে এটি "আমার কেন এটি দরকার?" ... +1 আকর্ষণীয় প্রশ্ন ব্যবহারকারী
অমিত

2
আমি ঠিক কী ভাবছিলাম ঠিক তা টুইট করুন। ওপিতে এটি সম্পর্কে কৌতূহল ছিল।
ইভান কার্সলেকে

উত্তর:


110

এই সীমাটি JVM নির্দিষ্টকরণে সংজ্ঞায়িত করা হয়েছে :

পদ্ধতি পরামিতি সংখ্যা 255 সীমাবদ্ধ একটি পদ্ধতি বর্ণনাকারী (§4.3.3), যেখানে সীমা জন্য এক ইউনিট অন্তর্ভুক্ত সংজ্ঞা দ্বারা এই দৃষ্টান্ত বা ইন্টারফেস পদ্ধতি আমন্ত্রণ ক্ষেত্রে।

বিভাগ -4.3.3 কিছু অতিরিক্ত তথ্য দেয়:

একটি পদ্ধতি বর্ণনাকারী শুধুমাত্র যদি এটা 255 বা তার কম মোট দৈর্ঘ্য, যেখানে যে দৈর্ঘ্যের জন্য অবদান রয়েছে পদ্ধতি পরামিতি প্রতিনিধিত্ব করে বৈধ এই দৃষ্টান্ত বা ইন্টারফেস পদ্ধতি আমন্ত্রণ ক্ষেত্রে।

মোট দৈর্ঘ্য পৃথক প্যারামিটারের অবদানের সংমিশ্রণ দ্বারা গণনা করা হয়, যেখানে দীর্ঘ বা ডাবল টাইপের একটি প্যারামিটার দৈর্ঘ্যে দুটি ইউনিট এবং অন্য যে কোনও ধরণের একটি পরামিতি একটি ইউনিট অবদান রাখে

আপনার পর্যবেক্ষণগুলি স্পট ছিল, ডাবল শব্দের আদিম ( long/ double) সাধারণ 4 বাইট ভেরিয়েবল এবং 4 বাইট অবজেক্টের উদাহরণের রেফারেন্সের চেয়ে দ্বিগুণ আকারের প্রয়োজন ।

Bit৪ বিট সিস্টেম সম্পর্কিত আপনার প্রশ্নের শেষ অংশ সম্পর্কে, স্পেসিফিকেশনটি নির্দিষ্ট করে যে একটি প্যারামিটার কত ইউনিট অবদান রাখে , স্পেসিফিকেশনের সেই অংশটি এখনও একটি bit৪ বিট প্ল্যাটফর্মে মেনে চলতে হবে , 64 বিবিটি জেভিএম 255 ইনস্ট্যান্ট প্যারামিটারগুলি সমন্বিত করবে (আপনার 255 এর মতো) Strings) অভ্যন্তরীণ বস্তুর পয়েন্টার আকার নির্বিশেষে।


10
আমি এই উত্তরটি যুক্ত করব যে bit৪ বিট আর্কিটেকচারে স্ট্যাকটিও 64৪ বিট। সুতরাং, যেহেতু প্যারামিটার গণনার সীমাবদ্ধতা স্ট্যাক আকারের সাথে আবদ্ধ, 64-বিট স্ট্যাক একই 255 অবজেক্ট রেফারেন্সগুলি সঞ্চয় করতে দেয়। সিস্টেম আর্কিটেকচার নির্বিশেষে longএবং এর doubleনির্বিশেষে নির্দিষ্ট চিকিত্সা অনুমানের অনেক জায়গায় ঘটে এবং 32-বিট যুগের অবশিষ্টাংশ হিসাবে উপস্থিত বলে মনে হয়।
সের্গেই

আমি ঠিক সেই অংশটি সম্পাদনা করার প্রক্রিয়ায় ছিলাম :) সম্মতি জানানো হয়েছে, বিভিন্ন বিশেষ প্ল্যাটফর্মের ক্ষেত্রেও স্পেকটিকে অবশ্যই সম্মান করা উচিত।
উম্বের্তো রায়মন্ডি

1
হ্যাঁ, যদি পরামিতিগুলির সংখ্যা শব্দ-আকারের একটি ফাংশন ছিল, তবে এটি বহনযোগ্যতা ভঙ্গ করবে; আপনি বিভিন্ন আর্কিটেকচারে একই জাভা প্রোগ্রামটি সফলভাবে সংকলন করতে পারেন নি।
ভিভিন পালিথ

3
ভারার্গগুলি একটি অবজেক্ট অ্যারেতে রূপান্তরিত হয় , প্যারামিটার তালিকায় কেবল একবারে ব্যবহৃত হতে পারে এবং শেষ অবস্থানটি দখল করে। এই সমস্ত বিষয় বিবেচনা করে, আমি বলতে চাই যে ভারার্গগুলি ব্যবহার করে প্যারামিটারের সংখ্যাটি 254 + পূর্ণসংখ্যার "প্রসারিত" হতে পারে MA MAX_VALUE (কমপক্ষে প্রোগ্রামারের জন্য ... প্যারামিটারগুলি এখনও 255), সুতরাং সেই কৌশলটি ব্যবহার করে আপনার পূর্ণসংখ্যার থাকতে পারে। MAX_VALUE অবজেক্টের পরামিতি।
উম্বের্তো রায়মন্ডি

1
@ এমআরটিএসজোল্ডার ভ্যারাগসের জন্য এই উত্তরটি একবার দেখুন ।
ভিভিন পালিথ

11

জেভিএম স্পেসিফিকেশনের ৪.৩.৩ অংশে আপনি যে তথ্যটি খুঁজছেন তা রয়েছে:

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

সুতরাং এটি প্রদর্শিত হয় যে হোস্ট-মেশিনটি 32-বিট বা 64-বিট পরামিতির সংখ্যার উপর কোনও প্রভাব ফেলবে না has যদি আপনি খেয়াল করেন, ডকুমেন্টেশনটি "ইউনিট" এর সাথে কথা বলে, যেখানে একটি "ইউনিট" এর দৈর্ঘ্য শব্দ-আকারের ফাংশন। শব্দ-আকারের সাথে সরাসরি সমানুপাতিক পরামিতিগুলির সংখ্যা থাকলে, বহনযোগ্যতার সমস্যা থাকবে; আপনি বিভিন্ন আর্কিটেকচারে একই জাভা প্রোগ্রামটি সংকলন করতে সক্ষম হবেন না (ধরে নেওয়া কমপক্ষে একটি পদ্ধতি বৃহত্তর শব্দের আকারের সাথে আর্কিটেকচারে সর্বাধিক সংখ্যক পরামিতি ব্যবহার করেছে)।


10

আমি এই সম্পর্কে একটি নিউজলেটার থেকে একটি আকর্ষণীয় সমস্যা পেয়েছি, http: //www.javasp विशेषज्ञ ists.eu/archive/Issue059.html

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

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

শ্রেণি বা ইন্টারফেস দ্বারা ঘোষিত হতে পারে এমন ক্ষেত্রগুলির সংখ্যা ক্লাসফিল স্ট্রাকচারের ক্ষেত্রের_সংখ্যার আইটেমের আকার দ্বারা 65535 এর মধ্যে সীমাবদ্ধ। নোট করুন যে ক্লাসফিল স্ট্রাকচারের ক্ষেত্র_কাউন্ট আইটেমের মান সুপারক্লাস বা সুপারইন্টারফেসগুলি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত ক্ষেত্রগুলি অন্তর্ভুক্ত করে না।

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