জাভা 32-বিট বনাম 64-বিট সামঞ্জস্য


97

জাভা কোডটি 32-বিট জেডিকে বিপরীতে 64-বিট জেভিএম-তে 32-বিট বাইট কোডের কাজ করে তৈরি এবং সংকলন করবে? বা একটি 64-বিট জেভিএমের জন্য কি 64-বিট বাইট কোডের প্রয়োজন?

আরও কিছুটা বিশদ দেওয়ার জন্য, আমার কাছে এমন কোড রয়েছে যা একটি সোলারিস পরিবেশে 32-বিট জেভিএম চালাচ্ছিল, তবে এখন আমি জেডিকে এবং ওয়েবলোগিক সার্ভারকে 64-বিটে আপগ্রেড করার পরে সমস্যাগুলি পাচ্ছি।


4
দয়া করে "সমস্যাগুলি" স্পষ্ট করুন।
থোরবজর্ন রাভন অ্যান্ডারসন

আমার অনুরূপ সমস্যা হচ্ছে - bit৪ বিট ওয়েবলোগিক সার্ভারে একটি স্প্রিং অ্যাপ স্থাপন করা। আমরা বিভিন্ন শ্রেণীর ব্যতিক্রম এবং অন্যান্য অপ্রয়োজনীয় ত্রুটিগুলি পাই নি। তদ্ব্যতীত, এটি কিছু bit৪ বিট মেশিন স্থাপন করে এবং চালিত হয়, তবে অন্যগুলিতে নয়। তবে আমরা কী আলাদা তা বলতে পারি না। আপনি কি এই সমাধান করেছেন?
18-22

4
@ নন্ট - সমস্যা যাই হোক না কেন এটি 32vs64 বিট সংকলন নয়।
স্টিফেন সি

উত্তর:


94

হ্যাঁ, জাভা বাইটকোড (এবং উত্স কোড) প্ল্যাটফর্মটি স্বতন্ত্র, আপনি ধরে নিচ্ছেন প্ল্যাটফর্মটি স্বাধীন লাইব্রেরি ব্যবহার করেন। 32 বনাম 64 বিটের কিছু উচিত নয়।


আমার যে প্রশ্নটি ছিল তা অনুসন্ধান করতে গিয়ে আমি এটিতে ছুটে এসেছি। সুতরাং আমি আমার অ্যাপ্লিকেশনটি 32 বিট জেভিএম এর অধীনে চালিত করেছি এবং 64 বিট নেটিভ লাইব্রেরি ব্যবহার করেছি। এটা ভাল দৌড়ে। কিন্তু যখন আমি আমার অ্যাপ্লিকেশনটি একটি 64 বিট জেভিএম এর অধীনে চালিত করি এবং 32 বিট নেটিভ লাইব্রেরি ব্যবহার করি, এটি ব্যর্থ হয়। এটা কীভাবে সম্ভব? উৎসুক.
উমং দেশাই

6
@ উমংডেসাই নেটিভ লাইব্রেরিগুলি প্ল্যাটফর্মের স্বাধীন লাইব্রেরি নয়, সুতরাং ধারণাটি ধরে রাখে না।
থরবজর্ন রাভন অ্যান্ডারসন

"কি ব্যাপার নয়" এর অর্থ কি 32-বিটের সাথে সংকলিত কোডটি javac64-বিটের সাথে উপলব্ধ মেমরিটির সুবিধা নেবে java?
মার্কাস জুনিয়াস ব্রুটাস

4
যদি আপনি এই বিষয়টির প্রতিরোধ না হয়ে থাকেন তবে এমন নেটিভ লাইব্রেরিগুলির জন্য নজর রাখুন যেগুলি একটি প্লাটফর্মের জন্য কাজ করে এমন একটি বয়ামে পরিণত হয়েছে, তবে আপনাকে ইস্যু দেওয়ার ক্ষেত্রে নয়। (আমি কী উল্লেখ করছি সে সম্পর্কে যদি আপনার কোনও ধারণা না থাকে তবে এই জাতীয় জিনিসগুলি দেখুন: stackoverflow.com/a/14051512/155631 )।
ম্যাট এস।

21

আমি দুর্ঘটনাবশত আমাদের (বিশাল) অ্যাপ্লিকেশনটি 32 বিবিটি ভিএম-এর পরিবর্তে 64 বিট ভিএম-তে চালিয়েছিলাম এবং কিছু বাহ্যিক গ্রন্থাগার (জেএনআই দ্বারা আহ্বান করা) ব্যর্থ হওয়া শুরু না হওয়া পর্যন্ত লক্ষ্য করি না।

32 বিট প্ল্যাটফর্মে সিরিয়ালযুক্ত ডেটা bit৪ বিট প্ল্যাটফর্মে কোনও সমস্যা ছাড়াই পঠিত ছিল।

আপনি কি ধরণের সমস্যা পাচ্ছেন? কিছু জিনিস কাজ করে অন্যকে না? আপনি কী জে কনসোল ইত্যাদি সংযুক্ত করার চেষ্টা করেছেন এবং এর চূড়া শিখর পেয়েছেন?

আপনার যদি খুব বড় ভিএম থাকে তবে আপনি দেখতে পাবেন যে C৪ বিটের জিসি ইস্যুগুলি আপনাকে প্রভাবিত করতে পারে।


4
আপনি কি বলছেন যে জেএনআই লাইব্রেরি 32 বিট হলে 64 বিট ভিএম-এ কাজ করবে না?
সি রস 20 '

4
তারা কাজ করে না। একজন সহকর্মী জানিয়েছিলেন যে তারা করেছে (যা আমি সন্দেহজনক বলে মনে করি - কমপক্ষে বলতে গেলে)। আমি ভাবলাম সে যদি সোলারিসের উপর দৌড়াচ্ছে এবং কিছুটা বুদ্ধি চলছে। ছিল না; সে ভুল হয়েছে এবং এটি 32 বিটের অধীনে চলছে was
ফোরটিয়ার্নার

জেএনআই লাইব্রেরিতে আমার একই রকম সমস্যা ছিল। 32-বিট এবং 64-বিট লাইব্রেরির মধ্যে কোনও সামঞ্জস্যতা ছিল না।
এরিক রবার্টসন

প্রকৃতপক্ষে, আপনার জেএনআই লিবগুলি প্রতিস্থাপন করা দরকার। আপনি সম্ভবত বিক্রেতার ওয়েবসাইট থেকে bit৪ বিট বিকল্পটি ডাউনলোড করতে পারেন। (এটি আমার পক্ষে, আমি যে সমস্ত জেএনআই লিব ব্যবহার করেছি তার জন্য কৌশলটি করেছে)।
বিভিডিবি

এই অভ্যন্তরীণ লাইব্রেরি ছিল এবং কোন 64 বিট সমতুল্য অনুষ্ঠানসূচী উপলব্ধ ছিল, তাই ফিরে 32 বিট ছিল ..
Fortyrunner

11

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

ভিএমকে যেতে হবে এমন কয়েকটি হুপ রয়েছে। উল্লেখযোগ্যভাবে ক্লাস ফাইলগুলিতে রেফারেন্সগুলি চিকিত্সা করা হয় যেন তারা intস্ট্যাকের মতো একই স্থান নিয়ে থাকে । doubleএবং longদুটি রেফারেন্স স্লট নিতে। উদাহরণস্বরূপ ক্ষেত্রগুলির জন্য, ভিএম সাধারণত যেভাবেই যেতে পারে তার কিছু পুনঃব্যবস্থা আছে। এগুলি স্বচ্ছভাবে হয়ে গেছে (তুলনামূলকভাবে)।

এছাড়াও কিছু 64-বিট জেভিএম "সংক্ষেপিত ওফস" ব্যবহার করে। তথ্য প্রতি 8 বা 16 বাইটের আশেপাশে সংযুক্ত থাকায়, ঠিকানার তিন বা চার বিট অকেজো (যদিও একটি "চিহ্ন" বিট কিছু অ্যালগরিদমের জন্য চুরি হতে পারে)। এটি 32-বিট ঠিকানা ডেটা (অতএব অর্ধেক বেশি ব্যান্ডউইথ এবং তাই দ্রুত) ব্যবহার করে 64-বিট প্ল্যাটফর্মে 35- বা 36-বিটের মাপের মাপ ব্যবহার করতে দেয়।


4
তুমি আমাকে অবাক করেছো. আমি মনে করি না 32-বিট বাইট কোড বা -৪-বিট বাইট কোডের মতো কোনও জিনিস আছে।
জন স্কিটি

4
আপনার উত্তরটি পুনরায় পঠন করা - আপনি কি নিশ্চিত যে আপনি এটি কেবল অন্যভাবেই বোঝাতে চাইছেন না? (হ্যাঁ তবে না।)
জন স্কিটি

জন স্কিটির কাছে +1। আমি একই মন্তব্য লিখছিলাম কিন্তু ফোন পেয়েছিলাম।
মাইকেল ম্যাইইয়ার্স

আমি হ্যাঁ হ্যাঁ বোঝাতে চাই নি, তবে প্রশ্নগুলি অন্যভাবে। কোনও সম্পাদনা ফিরিয়ে আনা হয়েছে এবং সম্পাদনা করেছেন (এবং এতে আরও কিছু তথ্য রেখেছেন)।
টম হাটিন -

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

9

সমস্ত বাইট কোড 8-বিট ভিত্তিক। (এ কারণেই এটি BYTE কোড বলা হয়) সমস্ত নির্দেশাবলী আকারের 8-বিটের একাধিক। আমরা 32-বিট মেশিনে বিকাশ করি এবং 64-বিট জেভিএম সহ আমাদের সার্ভারগুলি চালিত করি।

আপনি যে সমস্যার মুখোমুখি হচ্ছেন তার কিছু বিশদ দিতে পারেন? তাহলে আমাদের আপনাকে সাহায্য করার সুযোগ হতে পারে have অন্যথায় আমরা কেবল অনুমান করব যে আপনার কী সমস্যা হচ্ছে।


8

আপনার যদি নেটিভ কোড না থাকে (নির্দিষ্ট আর্কিটেকচারের জন্য মেশিন কোড সংকলিত) আপনার কোডটি 32-বিট এবং 64-বিট জেভিএম-তে সমানভাবে চলবে run

তবে নোট করুন, বৃহত্তর অ্যাড্রেসগুলির কারণে (32-বিট 4 বাইট, 64-বিট 8 বাইট) একই কাজের জন্য একটি 64-বিট জেভিএমের জন্য 32-বিট জেভিএমের চেয়ে বেশি মেমরির প্রয়োজন হবে।


আরও মনে রাখবেন যে 64৪-বিট সিস্টেমে একটি 32-বিট জেভিএম-তে 32-বিট সিস্টেমে 32-বিট জেভিএম-এর চেয়ে বেশি মেমরি উপলব্ধ থাকতে পারে, তাই আপনার যদি "কয়েক গিগাবাইট মেমরি ব্যবহার করে থাকে তবে এটি একটি আকর্ষণীয় বিকল্প হতে পারে" "অ্যাপ্লিকেশন।
থরবজর্ন রাভন অ্যান্ডারসন

3

আপনি যখন নেটিভ লাইব্রেরিতে ইন্টারফেস করছেন তখন 32-বিট vs 64-বিট পার্থক্য আরও গুরুত্বপূর্ণ হয়ে ওঠে। 64-বিট জাভা 32-বিট নন-জাভা ডেল (জেএনআই এর মাধ্যমে) এর সাথে ইন্টারফেস করতে সক্ষম হবে না


5
আপনি এই খুব পুরানো প্রশ্নের নতুন কিছু সরবরাহ করেন নি।
অস্টিন হেনলি


0

জাভা জেএনআইয়ের জন্য জেভিএমের মতো একই "বিটনেস" এর ওএস লাইব্রেরি প্রয়োজন। যদি আপনি এমন কিছু তৈরির চেষ্টা করেন যা উদাহরণস্বরূপ, আইইএসইএমএস.ডিএলএলে (% প্রোগ্রামফায়ালস% \ ইন্টারনেট এক্সপ্লোরারে থাকে) আপনার জেভিএম 32 বিবিটি থাকে তখন আপনার 32 বিবিটি সংস্করণটি গ্রহণ করা উচিত, যখন আপনার জেভিএম 64 বিট হয়। একইভাবে অন্যান্য প্ল্যাটফর্মের জন্য।

তা ছাড়া, আপনার সব প্রস্তুত হওয়া উচিত। উত্পাদিত জাভা বাইটকোড এস / বি একই।

নোট করুন যে বৃহত্তর প্রকল্পগুলির জন্য আপনার 64 বিট জাভা সংকলক ব্যবহার করা উচিত কারণ এটি আরও মেমরির ঠিকানা দিতে পারে।


-5

তুমি কোথায় ভুল! এই থিমটিতে আমি ওরাকলকে একটি প্রশ্ন লিখেছিলাম। উত্তর ছিল।

"আপনি যদি 32 কোড বিট মেশিনে আপনার কোডটি সংকলন করেন তবে আপনার কোডটি কেবল 32 বিট প্রসেসরের উপর চলতে হবে an আপনি যদি 64 কোড বিটি জেভিএম-তে আপনার কোড চালনা করতে চান তবে আপনার ক্লাসটি 64 বিট মেশিনে একটি 64 ফাইল ব্যবহার করে সংকলন করতে হবে -বিডি জেডিকে। "


5
বাইট কোড বিন্যাস জাভা কোড সাধারণত কম্পাইল করা হয় 32bit বা 64bit প্ল্যাটফর্মের নির্বিশেষে একই। যে কোনও স্থানীয় কোডের জন্য নিয়মগুলি আলাদা তবে জাভা বাইট কোড পোর্টেবল।
ম্যাকডোয়েল

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