আমি কীভাবে বলতে পারি যে আমার অ্যাপ্লিকেশনটি চালিত JVM 32 বিট বা 64-বিট হয়? বিশেষত, প্রোগ্রামের মধ্যে এটি সনাক্ত করতে আমি কোন ফাংশন বা বৈশিষ্ট্যগুলি ব্যবহার করতে পারি?
আমি কীভাবে বলতে পারি যে আমার অ্যাপ্লিকেশনটি চালিত JVM 32 বিট বা 64-বিট হয়? বিশেষত, প্রোগ্রামের মধ্যে এটি সনাক্ত করতে আমি কোন ফাংশন বা বৈশিষ্ট্যগুলি ব্যবহার করতে পারি?
উত্তর:
আপনি এই সিস্টেমের সম্পত্তি পুনরুদ্ধার করুন যা এই জেভিএমের সাক্ষ্যটির সাথে চিহ্নিত করে:
System.getProperty("sun.arch.data.model");
সম্ভাব্য ফলাফলগুলি হ'ল:
"32"
- 32-বিট জেভিএম"64"
- 64-বিট জেভিএম"unknown"
- অজানা জেভিএমহটস্পট এফএকিউতে বর্ণিত হিসাবে :
জাভা কোড লেখার সময় আমি 32 এবং 64-বিট অপারেশনের মধ্যে কীভাবে পার্থক্য করব?
এমন কোনও পাবলিক এপিআই নেই যা আপনাকে 32 এবং 64-বিট অপারেশনের মধ্যে পার্থক্য করতে দেয়। লেখার একবারে অন্য প্ল্যাটফর্ম হিসাবে -৪-বিটের কথা ভাবেন, যে কোনও জায়গায় .তিহ্য চালান। তবে আপনি যদি কোডটি লিখতে চান যা প্ল্যাটফর্ম নির্দিষ্ট (আপনার জন্য লজ্জাজনক), সিস্টেম সম্পত্তি sun.arch.data.model এর মান "32", "64" বা "অজানা" আছে।
আপনার জাভা কোডটি যদি স্থানীয় লাইব্রেরির উপর নির্ভর করে এবং আপনার লাইব্রেরির 32- বা 64-বিট সংস্করণটি প্রারম্ভকালে লোড করবেন কিনা তা নির্ধারণ করা দরকার যেখানে এটি প্রয়োজনীয় হতে পারে তার একটি উদাহরণ।
sun.*
কোনও আইবিএম জেভিএম সহ সিস্টেমের বৈশিষ্ট্যগুলি খুঁজে পাওয়ার আশা করব না । অন্য কথায়, এটি পোর্টেবল নয়।
জাভার নির্দিষ্ট সংস্করণগুলির জন্য, আপনি পতাকাগুলি -d32
এবং কমান্ড লাইন থেকে জেভিএমের সাক্ষ্য পরীক্ষা করতে পারেন -d64
।
$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
একটি 64-বিট জেভিএম পরীক্ষা করতে, চালান:
$ java -d64 -version
যদি এটি 64৪-বিট জেভিএম না হয় তবে আপনি এটি পাবেন:
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
একইভাবে, 32-বিট জেভিএম পরীক্ষা করতে, চালান:
$ java -d32 -version
যদি এটি 32-বিট জেভিএম না হয় তবে আপনি এটি পাবেন:
Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.
এই পতাকাগুলি জাভা 7 এ যুক্ত করা হয়েছিল, জাভা 9-এ অবমূল্যায়িত হয়েছে, জাভা 10-তে সরানো হয়েছে এবং জাভা-র আধুনিক সংস্করণগুলিতে আর উপলভ্য নয়।
java -d32 -version
32-বিট চালাচ্ছেন না তা যাচাই করতে আপনি চালাতে পারেন । দু'জনেই কাজ করতে চাই Win7
।
java -d32 -version
এবং থেকেও পেয়েছি java -d64 -version
।
java -version
আপনার কনসোলটি কেবল টাইপ করুন।
যদি bit৪ বিটের সংস্করণটি চলমান থাকে তবে আপনি একটি বার্তা পাবেন:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
একটি 32 বিট সংস্করণ এর অনুরূপ কিছু দেখায়:
java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)
তৃতীয় লাইনের Client
পরিবর্তে নোট করুন 64-Bit Server
। Client/Server
অংশ অপ্রাসঙ্গিক, এটা অভাবে এর 64-Bit
যে বিষয়ে।
যদি আপনার সিস্টেমে একাধিক জাভা সংস্করণ ইনস্টল করা থাকে তবে আপনি যে জাভা সংস্করণটি চেক করতে চান তার / বিন ফোল্ডারে নেভিগেট করুন এবং java -version
সেখানে টাইপ করুন ।
আমি 32-বিট জেভিএম ইনস্টল করেছি এবং এটিকে আবার চেষ্টা করেছি, নিম্নলিখিতটি দেখে মনে হচ্ছে আপনি ওএস আর্চকে নয়, জেভিএম সাক্ষ্য দিচ্ছেন:
System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "amd64" when using 64-bit JVM
এটি সান এবং আইবিএম জেভিএম (32 এবং 64-বিট) উভয়ের বিরুদ্ধে পরীক্ষা করা হয়েছিল। স্পষ্টতই, সিস্টেম সম্পত্তি কেবল অপারেটিং সিস্টেম খিলান নয়।
os.arch
অনেকগুলি সম্ভাব্য মান রয়েছে, এটি 32 বা 64 বিট কিনা তা বলা মুশকিল। Lopica.sourceforge.net/os.html
পরিপূরক তথ্য:
একটি উপর চলমান প্রক্রিয়া আপনি (কিছু সাম্প্রতিক সূর্যের JDK5 / 6 সংস্করণের সাথে অন্তত) ব্যবহার করতে পারেন:
$ /opt/java1.5/bin/jinfo -sysprops 14680 | grep sun.arch.data.model
Attaching to process ID 14680, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_16-b02
sun.arch.data.model = 32
যেখানে 14680 অ্যাপ্লিকেশনটি চালাচ্ছে jvm এর পিআইডি। "os.arch "ও কাজ করে।
এছাড়াও অন্যান্য পরিস্থিতিতে সমর্থিত:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP
তবে এই নোটটিও বিবেচনা করুন:
" দ্রষ্টব্য - এই ইউটিলিটিটি অসমর্থিত এবং জেডিকে ভবিষ্যতের সংস্করণগুলিতে উপলভ্য বা নাও থাকতে পারে Windows PATH এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে লক্ষ্য প্রক্রিয়া দ্বারা ব্যবহৃত jvm.dll এর অবস্থান বা ক্র্যাশ ডাম্প ফাইলটি উত্পাদিত হয়েছিল এমন অবস্থান থাকতে হবে।
লিনাক্সে, আপনি নিম্নলিখিত দুটি কমান্ডের মাধ্যমে ELF শিরোনামের তথ্য পেতে পারেন:
file {YOUR_JRE_LOCATION_HERE}/bin/java
o / p: ELF 64-বিট এলএসবি এক্সিকিউটেবল জিএনইউ / লিনাক্স ২.৪.০-এর জন্য ইএনএফ / লিনাক্স ২.৪.০-এর জন্য এলএলএফ -৪ , এএমডি এক্স ৮86-6464, সংস্করণ ১ (এসওয়াইএসভি), গতিযুক্তভাবে সংযুক্ত (শেয়ারড লিবস ব্যবহার করে), ছিটানো হয়নি
অথবা
readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'
o / p: শ্রেণি: ELF 64
আপনি যদি জেএনএ ব্যবহার করছেন তবে আপনি com.sun.jna.Native.POINTER_SIZE == 4
(32 বিট) বা com.sun.jna.Native.POINTER_SIZE == 8
(64 বিট) পরীক্ষা করতে পারেন can
উইন্ডোজ and এর অধীনে " প্রোগ্রামস | প্রোগ্রামস এবং ফিচারস " এর অধীনে " কন্ট্রোল প্যানেল " এর অধীনে জেআরই এবং জেডিকে-র 64৪-বিট রূপগুলি বন্ধনীতে "in৪- বিট " দিয়ে তালিকাভুক্ত করা হয়েছে (উদাঃ " জাভা এসই ডেভলপমেন্ট কিট 65 আপডেট (৫ (-৪-বিট) ) "), যখন 32-বিট ভেরিয়েন্টের জন্য বৈকল্পিকগুলি প্রথম বন্ধনীতে উল্লিখিত হয়নি (উদাহরণস্বরূপ কেবল" জাভা এসই বিকাশ কিট 8 আপডেট 60 ")।
জন্য Windows
, আপনি Java
বাড়ির অবস্থান পরীক্ষা করতে পারেন । যদি এটি থাকে (x86)
তবে তা 32-bit
অন্যথায় 64-bit
:
public static boolean is32Bit()
{
val javaHome = System.getProperty("java.home");
return javaHome.contains("(x86)");
}
public static boolean is64Bit()
{
return !is32Bit();
}
উদাহরণ উদাহরণ:
C:\Program Files (x86)\Java\jdk1.8.0_181\bin\java.exe # 32-bit
C:\Program Files\Java\jdk-10.0.2\bin\java.exe # 64-bit
Windows
একমাত্র সমাধান সম্পর্কে যত্ন ?আপনি কোন বিট সংস্করণটি চালাচ্ছেন তা যদি জানতে হয় তবে আপনি সম্ভবত নেটিভ কোডটি নিয়ে ঘুরে বেড়াচ্ছেন Windows
সুতরাং প্ল্যাটফর্ম-স্বাধীনতা যেভাবেই উইন্ডো থেকে বাইরে।
জেভিএম এর সংস্করণ পেতে বর্তমানে প্রোগ্রামটি চলছে
System.out.println(Runtime.class.getPackage().getImplementationVersion());
1.8.0_172
বা null
উপর Java 10
এবং যেকোনোভাবে প্রশ্নের উত্তর নেই।