2010-10-31 16 views
5

मैं जावा में एक ऐप्लिकेशन है जो दोनों 32bit और 64bit सिस्टम पर चलता है पर देख रहा हूँ, और यह IP पते के साथ मुख्य रूप से संबंधित है। ये IP पते पूर्णांक के रूप में रखा जाता है, और इस के लिए सामान्य प्रकार 64 बिट प्लेटफार्मों पर स्मृति के लिए ढेर बरबाद करती है (और हाँ, स्मृति उपयोग पहले से ही यहाँ एक मुद्दा हो दिखाया गया है)। आप 32 बिट अभिन्न मूल्यों की घोषणा कैसे करते हैं जो x64 आर्किटेक्चर पर 32 बिट्स पर भी रहते हैं?मैं जावा में 32 बिट पूर्णांक कैसे घोषित करूं?

मैं के रूप में एक जावा नौसिखिया, अगर वहाँ एक निर्मित प्रकार है कि पहले से ही संभाल करने IP पते मेरे लिए करते रहे कि संकोच न करें डिज़ाइन किया गया है;)

+3

मैंने सोचा था कि 'जावा में int' 32 बिट प्रकार है आयात है कि ऐसा करने के लिए ?! – AraK

+0

@AraK - शायद यह है, लेकिन मुझे यकीन नहीं है कि यह x64 सिस्टम पर 64 बिट्स तक स्केल नहीं करता है और मुझे दस्तावेज़ों में एक निश्चित उत्तर नहीं दिख रहा है। –

+0

या इसके बजाय, मैं इसे int के लिए देखता हूं, लेकिन ** हस्ताक्षरित ** int के लिए कहीं भी कोई संदर्भ नहीं। –

उत्तर

27

जावा अपने डेटा के लिए विशिष्ट चौड़ाई है पोर्टेबिलिटी के लिए प्रकार। 64-बिट प्लेटफार्मों पर भी इंटीजर 32 बिट चौड़े हैं। Java language specification राज्यों quite clearly (थोड़ा, अधिक पठनीय बनाने के लिए दूसरे शब्दों में बयान मेरी राय में):

अभिन्न प्रकार बाइट, लघु, पूर्णांक, और लंबे, जिनके मान क्रमशः 8 बिट, 16 बिट, 32- हैं बिट और 64-बिट दो-पूरक पूरक पूर्णांक, और चार, जिनके मान 16-बिट हस्ताक्षरित पूर्णांक हैं जो यूटीएफ -16 कोड इकाइयों का प्रतिनिधित्व करते हैं।

यह, पूर्णांकों के विभिन्न चौड़ाई (और दो के पूरक की तरह भी एनकोडिंग, लोगों को 'पूरक और संकेत/परिमाण) कि जावा से बचने के लिए आशा व्यक्त की साथ सी में खोज की कई पोर्टेबिलिटी मुद्दों के कारण यकीनन है, खासकर के बाद से यह था संभव के रूप में कई अलग-अलग प्लेटफार्मों पर चलने के लिए मतलब था।

IP पते से निपटने के लिए एक अंतर्निहित प्रकार के रूप में, जावा दोनों Inet4Address और Inet6Address, अपनी आवश्यकताओं पर निर्भर करता है (और उनके पूर्वज, InetAddress) है। जावा के

+1

बिना हस्ताक्षर किए के बारे में क्या? –

+5

@ जोएल जावा ने हस्ताक्षर नहीं किया – cobbal

+1

इसे स्वीकार कर लिया क्योंकि यह इनएट एड्रेस क्लास –

2

पूर्णांक आदिम प्रकार 32 बिट

2

उपयोग आदिम int प्रकार के एक निश्चित आकार की है। यह सभी जावा प्लेटफार्मों पर 32 बिट है; JLS 4.2.1 देखें।

और हाँ, स्मृति उपयोग पहले से ही यहाँ एक मुद्दा हो दिखाया गया है

ठीक है, अगर तुम कहते हो।

हम नहीं जानते कि आप यहां क्या कर रहे हैं। या

  • स्मृति में IP पते नहीं रखने के लिए,
  • अपने जावा ढेर आकार बढ़ाने के लिए,: लेकिन अगर आप, स्मृति में आईपी पतों की बड़ी संख्या का प्रतिनिधित्व करने में स्मृति के उपयोग को लेकर चिंतित हैं तो हो सकता है आप की जरूरत है
  • (यदि आवश्यक हो) अपने हार्डवेयर या ऑपरेटिंग सिस्टम का आकार बढ़ाएं।

या शायद आप अनुपात से बाहर "बर्बादी" स्मृति प्राप्त कर चुके हैं। जावा आंतरिक रूप से भूख लगी है, और व्यावहारिक उत्तर यह है कि वह जो चाहता है उसे दे।

यूपी

पालन जावा एक अहस्ताक्षरित int प्रकार नहीं है। लेकिन आपको आईपी पते का प्रतिनिधित्व करने की आवश्यकता नहीं है, कम से कम नहीं क्योंकि आपको उन पर अंकगणित करने की आवश्यकता नहीं है।

(और यदि आपने किया, तो भी ऐसा करने के तरीके हैं। ध्यान रखें कि यदि आप जावा एप्लिकेशन से "बर्बादी" की अंतिम औंस निचोड़ना चाहते हैं, तो आपको कुछ बदसूरत करने की आवश्यकता होगी बातें)

0

http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html से:।

अभिन्न प्रकार के होते हैं बाइट, लघु, पूर्णांक, और लंबे समय है, जिसका मान हैं 8 बिट, 16-बिट, 32-बिट और 64-बिट पर हस्ताक्षर किए दो के पूरक पूर्णांक, क्रमशः, और चार, जिनके मान 16-बिट हैं हस्ताक्षर किए गए पूर्णांक यूनिकोड वर्णों का प्रतिनिधित्व करते हैं।

तो int पहले से ही परिभाषा से 32-बिट, हालांकि दुभाषिया एक 64-बिट सीमा पर डालने जा सकता है स्मृति में आदेश का उपयोग तेजी लाने के लिए है।

0

जावा में "int"/"Integer" प्लेटफॉर्म पर निर्भर नहीं है। यह हमेशा 32-बिट है। मंच पर निर्भर एक com.sun.jna.ptr.IntByReference है।

1

चिंता मत करो, जावा में int प्रकार, के रूप में उल्लेख here परिभाषित किया गया है (विपरीत C/C++ में) वास्तव में 32-बिट किया जाना है।

1

int प्रत्येक प्लेटफ़ॉर्म पर 32 बिट है। हालांकि, इसे हस्ताक्षरित करने के लिए, आपको अंक और ऐसी सामग्री को मैन्युअल रूप से स्थानांतरित करना होगा - यह वास्तव में जटिल हो जाता है। बाइट [] या लंबे समय तक क्यों नहीं उपयोग करें?

7

इंट 64 बिट मशीनों पर भी 32 बिट होगा, आपको कुछ भी करने की आवश्यकता नहीं है।

जावा भाषा कल्पना से (http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

पूर्णांक डेटा प्रकार एक 32-बिट दो के पूरक पूर्णांक पर हस्ताक्षर किए है। इसका न्यूनतम मूल्य -2,147,483,648 है और अधिकतम मूल्य 2,147,483,647 (समावेशी) है। अभिन्न मूल्यों के लिए, यह डेटा प्रकार आमतौर पर डिफ़ॉल्ट विकल्प होता है। यह डेटा प्रकार आपके प्रोग्राम का उपयोग करने वाले नंबरों के लिए काफी बड़ा होगा, लेकिन यदि आपको मूल्यों की विस्तृत श्रृंखला की आवश्यकता है, तो इसके बजाय लंबे समय तक उपयोग करें।

32 बिट और 64 बिट जावा वीएम के बीच प्राथमिक अंतर अधिकतम ढेर आकार है, यानी वीएम प्रबंधन की स्मृति की मात्रा है।

हालांकि, 64 बिट VMs के आंतरिक कार्यान्वयन एक स्मृति के उपयोग पर कोई प्रभाव होगा:

आम तौर पर, होने के लाभों 64 बिट VMs में एक छोटा सा प्रदर्शन हानि के साथ आते हैं स्मृति की बड़ी मात्रा में पता करने के लिए सक्षम एक ही अनुप्रयोग को 32-बिट वीएम पर बनाम बनाम बनाम। यह इस तथ्य के कारण है कि सिस्टम में प्रत्येक मूल सूचक 4 के बजाय 8 बाइट्स लेता है। इस अतिरिक्त डेटा की लोडिंग मेमोरी उपयोग पर प्रभाव डालती है जो निष्पादन के दौरान कितने पॉइंटर्स लोड हो जाती है, इस पर निर्भर करता है कि थोड़ा धीमा निष्पादन होता है आपका जावा प्रोग्राम

से: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_description

0

जावा पूर्णांक में 32 बिट है। लंबे समय 64 बिट हैं। तो यदि 32 बिट से अधिक है तो आपको लंबे समय की आवश्यकता है।

-1

सबसे अच्छा तरीका यह नया पुस्तकालयों

import java.lang.Object; 
import java.lang.Number; 
import java.lang.Integer; 
You should import these libraries, this will give you a new max values. 
संबंधित मुद्दे