दिलचस्प पोस्ट
मेरी स्थिर फाइलों को एक्सेस करने के लिए मुझे http। StripPrefix का उपयोग करने की आवश्यकता क्यों है? मैं PHP स्क्रिप्ट के माध्यम से क्रॉन जॉब कैसे सेट करूं? एप्लिकेशन के डेटा को प्रोग्राम को स्पष्ट करें पुराने रिमोट जीआईटी की शाखाओं को साफ करना डीईवी निर्देश का उपयोग करने से पहले ईडीएक्स 0 क्यों होना चाहिए? समूह द्वारा, डेटाटाइबल में: = कई कॉलम असाइन करें कस्टम क्रिया का उपयोग करके गतिविधि प्रारंभ करें ब्राउज़र में उपयोग के लिए मैं जावा एप्लेट पर कैसे हस्ताक्षर करूं? कैसे matlotlib colormap लागू करने के लिए पीआईएल छवि को नुकीले सरणी कन्वर्ट करने के लिए System.Web.HttpContext.Current.User.Identity.Name बनाम System.Environment.UserName में ASP.NET "शब्द-ब्रेक: ब्रेक-ऑल" बनाम "वर्ड-रैप: ब्रेक-वर्ड" सीएसएस में क्या अंतर है? पायथन: माता पिता मर जाता है जब बच्चे की प्रक्रिया (एस) को मारने के लिए कैसे? एंड्रॉइड पर कस्टम संवाद: मैं अपना शीर्षक कैसे केन्द्रित कर सकता हूं? मेरे कंप्यूटर पर php फ़ाइलों को कैसे चलाने के लिए jquery मोबाइल बाहरी पैनल स्टाइल पर नहीं ले रहा है

सूरज क्यों होता है। Mesc.Unsafe अस्तित्व में है, और इसे वास्तविक दुनिया में कैसे इस्तेमाल किया जा सकता है?

मैं सूर्य के पार आया। Mesc.Unsafe पैकेज दूसरे दिन और यह क्या कर सकता है पर हैरान था।

बेशक, क्लास को अनुपयुक्त किया गया है, लेकिन मैं सोच रहा था कि क्या इसका इस्तेमाल करने का एक अच्छा कारण था। परिदृश्य क्या पैदा हो सकता है, जहां आपको इसका उपयोग करना होगा? वास्तविक दुनिया परिदृश्य में इसका उपयोग कैसे किया जा सकता है?

इसके अलावा, अगर आपको इसकी ज़रूरत है, क्या ऐसा नहीं दर्शाता है कि आपके डिज़ाइन में शायद कुछ गलत है?

जावा में यह वर्ग क्यों शामिल है?

वेब के समाधान से एकत्रित समाधान "सूरज क्यों होता है। Mesc.Unsafe अस्तित्व में है, और इसे वास्तविक दुनिया में कैसे इस्तेमाल किया जा सकता है?"

उदाहरण

  1. वीएम "आंतरिकता।" अर्थात् सीएएस (तुलना-और-स्वैप) लॉक-फ्री हैश टेबल्स में उपयोग किया जाता है उदा: sun.misc.Unsafe.compareAndSwapInt यह वास्तविक जेएनआई कॉल को देशी कोड में बना सकता है जिसमें सीएएस के लिए विशेष निर्देश शामिल हैं

    यहां सीएएस के बारे में और अधिक पढ़ें http://en.wikipedia.org/wiki/Compare-and-swap

  2. सूर्य वी। वी.एम. की असेंसेफ कार्यक्षमता का उपयोग अप्रकाशित वस्तुओं को आवंटित करने के लिए किया जा सकता है और फिर किसी अन्य विधि कॉल के रूप में कन्स्ट्रक्टर इनवोकेशन की व्याख्या करना।

  3. कोई मूल पते से डेटा को ट्रैक कर सकता है। Java.lang.Unsafe class का उपयोग करते हुए किसी ऑब्जेक्ट की मेमोरी पते को प्राप्त करना संभव है, और असुरक्षित प्राप्त / विधियों के माध्यम से अपने खेतों पर सीधे कार्य कर सकते हैं!

  4. JVM के लिए समय अनुकूलन संकलित करें उच्च प्रदर्शन वीएम "जादू" का उपयोग करते हुए, निम्न स्तर के संचालन की आवश्यकता होती है। जैसे: http://en.wikipedia.org/wiki/Jikes_RVM

  5. स्मृति को आवंटित करना, sun.misc.Unsafe.allocateMemory उदा: – DirectByteBuffer कन्स्ट्रक्टर इसे आंतरिक रूप से कॉल करता है जब ByteBuffer.allocateDirect लागू होता है

  6. कॉल स्टैक को ट्रेसिंग करना और sun.misc.Unsafe द्वारा instantiated मूल्यों के साथ फिर से खेलना, इंस्ट्रूमेंटेशन के लिए उपयोगी

  7. sun.misc.Unsafe.arrayBaseOffset और arrayIndexScale को सरणी के विकास के लिए इस्तेमाल किया जा सकता है, बड़ी वस्तुओं को स्कैन करने, अपडेट करने या बड़े ऑब्जेक्ट पर ले जाने के वास्तविक समय की लागत को सीमित करने के लिए बड़ी ऑरेज़ को कुशलता से तोड़ने के लिए एक तकनीक

  8. http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

यहां संदर्भों पर अधिक – http://bytescrolls.blogspot.com/2011/04/interesting-uses-of-sunmiscunsafe.html

बस कुछ कोड खोज इंजन में एक खोज चलाने से मुझे निम्नलिखित उदाहरण मिलते हैं:

  • जावा ऑब्जेक्ट नोटेशन – यह अधिक कुशल सरणी प्रसंस्करण के लिए उपयोग करें, जवाडोक का हवाला देते हुए

{@link Unsafe} ऑब्जेक्ट तक पहुंच प्राप्त करने के लिए साधारण वर्ग {@link Unsafe} * को सरणियों पर कुशल कैस संचालन की अनुमति देने के लिए आवश्यक है। ध्यान दें कि {@link java.util.concurrent.atomic} में संस्करण, जैसे कि {@link java.util.concurrent.atomic.AtomicLongArray}, अतिरिक्त स्मृति क्रम की गारंटी की आवश्यकता होती है जो आमतौर पर इन एल्गोरिदम में जरूरी नहीं होते हैं और यह भी महंगा है अधिकांश प्रोसेसर पर

  • सोयालेट – ओएसएक्स जावडोक अंश के लिए जावा 6

/ ** सूरज के लिए आधार वर्ग। Mesc.Unsafe- आधारित फ़ील्डएस्टर्स, स्थिर क्षेत्रों के लिए अवलोकन यह है कि रिफ्लेक्शन कोड के दृष्टिकोण से केवल 9 प्रकार के फ़ील्ड हैं: आठ आदिम प्रकार और ऑब्जेक्ट जनरेट किए गए बायटेकोड के बजाय कक्षा असुरक्षित का उपयोग करना स्मृति और गतिशील रूप से जनरेट किए गए फील्डएवरसर्स के लिए लोडिंग समय बचाता है। * /

  • SpikeSource

/ * फ़ाइनल फ़ाइल्स, जो कि तार के पार भेजे जाते हैं .. प्राप्त पक्ष पर ऑब्जेक्ट कैसे खोलें और पुन: बनाएँ? हम कन्स्ट्रक्टर को आमंत्रित नहीं करना चाहते क्योंकि यह अंतिम क्षेत्रों के लिए मूल्य स्थापित करेगा। हमें अंतिम क्षेत्र को बिल्कुल ठीक करना होगा जैसे प्रेषक पक्ष पर था। सूरज। मिस। यूनिसेफ हमारे लिए यह करता है * /

कई अन्य उदाहरण हैं, बस उपरोक्त लिंक का पालन करें …

दिलचस्प, मैं इस वर्ग के बारे में कभी भी नहीं सुना होगा (जो शायद एक अच्छी बात है, वास्तव में)।

एक चीज जो मन में कूद जाती है वह असुरक्षित # सेटमेमरी को शून्य करने वाले बफ़र्स का उपयोग कर रही है जिसमें एक बिंदु (पासवर्ड, चाबी, …) पर संवेदनशील जानकारी होती है। आप यह भी "अपरिवर्तनीय वस्तुओं" के क्षेत्र में भी कर सकते हैं (फिर से मुझे लगता है कि सादा पुरानी प्रतिबिंब भी यहाँ चाल हो सकती है)। मैं कोई सुरक्षा विशेषज्ञ नहीं हूं, हालांकि यह एक नमक के अनाज के साथ लेता हूं।

असुरक्षित। ThrowException – उन्हें घोषित किए बिना चेक अपवाद फेंकने की अनुमति देता है।

यह कुछ मामलों में उपयोगी है जहां आप प्रतिबिंब या एओपी के साथ काम करते हैं।

मान लें कि आप किसी उपयोगकर्ता परिभाषित इंटरफ़ेस के लिए एक सामान्य प्रॉक्सी बनाएँ। और उपयोगकर्ता निर्दिष्ट कर सकता है कि इंटरफ़ेस में अपवाद की घोषणा करते हुए किसी विशेष मामले में आरोपण द्वारा फेंक दिया गया है। फिर यह एकमात्र तरीका है जो मुझे पता है, इंटरफ़ेस के डायनेमिक कार्यान्वयन में एक जाँच अपवाद बढ़ने के लिए।

 import org.junit.Test; /** need to allow forbidden references! */ import sun.misc.Unsafe; /** * Demonstrate how to throw an undeclared checked exception. * This is a hack, because it uses the forbidden Class {@link sun.misc.Unsafe}. */ public class ExceptionTest { /** * A checked exception. */ public static class MyException extends Exception { private static final long serialVersionUID = 5960664994726581924L; } /** * Throw the Exception. */ @SuppressWarnings("restriction") public static void throwUndeclared() { getUnsafe().throwException(new MyException()); } /** * Return an instance of {@link sun.misc.Unsafe}. * @return THE instance */ @SuppressWarnings("restriction") private static Unsafe getUnsafe() { try { Field singleoneInstanceField = Unsafe.class.getDeclaredField("theUnsafe"); singleoneInstanceField.setAccessible(true); return (Unsafe) singleoneInstanceField.get(null); } catch (IllegalArgumentException e) { throw createExceptionForObtainingUnsafe(e); } catch (SecurityException e) { throw createExceptionForObtainingUnsafe(e); } catch (NoSuchFieldException e) { throw createExceptionForObtainingUnsafe(e); } catch (IllegalAccessException e) { throw createExceptionForObtainingUnsafe(e); } } private static RuntimeException createExceptionForObtainingUnsafe(final Throwable cause) { return new RuntimeException("error while obtaining sun.misc.Unsafe", cause); } /** * scenario: test that an CheckedException {@link MyException} can be thrown * from an method that not declare it. */ @Test(expected = MyException.class) public void testUnsingUnsaveToThrowCheckedException() { throwUndeclared(); } } 

संदर्भ अनुरेखण के लिए ग्रहण का उपयोग करते हुए जावा 1.6.12 लाइब्रेरी के बहुत संक्षिप्त विश्लेषण के आधार पर ऐसा लगता है कि Unsafe की हर उपयोगी कार्यक्षमता उपयोगी तरीके से सामने आई है।

सीएएस संचालन परमाणु * वर्गों के माध्यम से सामने आए हैं। मेमोरी मेनीप्युलस फ़ंक्शंस डायरेक्टबिटबफर सिंक निर्देश (पार्क, अनपार्क) के माध्यम से उजागर किए जाते हैं जो एब्स्ट्रक्यूक्वायड सिंक्रनाइज़र के माध्यम से सामने आते हैं जो कि लॉक लागूकरण द्वारा उपयोग किया जाता है।

कक्षा असुरक्षित

निम्न-स्तर, असुरक्षित संचालन करने के लिए तरीकों का संग्रह। हालांकि कक्षा और सभी विधियां सार्वजनिक हैं, हालांकि इस क्लास का उपयोग सीमित है क्योंकि केवल विश्वसनीय कोड इसके उदाहरण प्राप्त कर सकता है।

इसका एक उपयोग java.util.concurrent.atomic वर्गों में है:

  • AtomicIntegerArray
  • AtomicLongArray

कुशल मेमोरी कॉपी के लिए (कम से कम ब्लॉक के लिए सिस्टम। अर्रेकॉपी () की तुलना में तेज़ी से कॉपी करना); के रूप में जावा LZF और स्पीपी codecs द्वारा इस्तेमाल किया। वे 'मिल लांग' और 'लेट' का उपयोग करते हैं, जो बाइट-बाय-बाइट प्रतियों की तुलना में तेज़ हैं; खासकर 16/32/64 बाइट ब्लॉकों जैसी चीजों की प्रतिलिपि बनाते समय

इसका उपयोग करने के लिए बड़ी मात्रा में स्मृति कुशलता से आवंटित करें, जैसे कि आपके अपने स्वयं के वॉक्सेल इंजन में! (यानी Minecraft- शैली खेल।)

मेरे अनुभव में, जेवीएम अक्सर सचमुच इसकी ज़रूरत की सीमा-जांच को खत्म करने में असमर्थ है I उदाहरण के लिए, यदि आप एक बड़े सरणी पर फिर से चल रहे हैं, लेकिन वास्तविक मेमोरी एक्सेस को लूप में एक गैर-आभासी * विधि कॉल के नीचे टक दिया जाता है, तो JVM अभी भी प्रत्येक ऐरे प्रवेश के साथ एक सीमा जांच कर सकता है, बजाय एक बार पहले सूचित करते रहना। इस प्रकार, संभावित रूप से बड़े प्रदर्शन लाभों के लिए, आप जेएमएम सीमा-जांच को एक विधि के माध्यम से पाश के अंदर से समाप्त कर सकते हैं जो sun.misc.Unsafe को सीधे मेमोरी तक पहुंचाने के लिए, सही स्थानों पर किसी भी सीमा-जांच को सुनिश्चित करने के लिए सुनिश्चित करता है। (आप कुछ स्तर पर चेक सीमा तय कर रहे हैं, है ना?)
* गैर-आभासी द्वारा, मेरा मतलब है कि जेवीएम को आपकी विशेष पद्धति को गतिशील रूप से हल करने की ज़रूरत नहीं है, क्योंकि आपने सही तरीके से गारंटी दी है कि क्लास / विधि / इंस्टैलेशन स्थिर / अंतिम / क्या-क्या-आप के कुछ संयोजन हैं

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

इसके साथ कुछ संभावित प्रमुख समस्याएं हैं: विशेष रूप से, जब आप अपने इंटरफ़ेस के ग्राहकों को बिना सीमा के स्मृति में पहुंचने की क्षमता प्रदान करते हैं, तो वे शायद इसका दुरुपयोग करेंगे (यह मत भूलें कि हैकर आपके इंटरफेस के ग्राहक भी हो सकते हैं … विशेषकर जावा में लिखे गए एक वॉक्सेल इंजन के मामले में।) इस प्रकार, आपको अपने इंटरफेस को ऐसे तरीके से डिज़ाइन करना चाहिए, जैसे स्मृति एक्सेस का दुरुपयोग नहीं किया जा सकता, या आप अपने खतरनाक इंटरफ़ेस के साथ मिलकर कभी उपयोगकर्ता के डेटा को मान्य करने के लिए सावधान रहना चाहिए। भयावह चीजों को ध्यान में रखते हुए एक हैकर अनियंत्रित स्मृति पहुंच के साथ कर सकता है, दोनों तरीकों को लेने के लिए संभवतः सबसे अच्छा है

मैं हाल ही में जेवीएम को फिर से क्रियान्वित करने के लिए काम कर रहा था और पाया कि Unsafe वर्गों की एक आश्चर्यजनक संख्या लागू की गई है। क्लास ज्यादातर जावा लाइब्रेरी कार्यान्वयनकर्ताओं के लिए डिज़ाइन किया गया है और उन सुविधाओं को शामिल किया गया है जो मौलिक असुरक्षित हैं, लेकिन तेज प्राथमिकताएं बनाने के लिए आवश्यक हैं। उदाहरण के लिए, हार्ड-स्तरीय सिंक्रनाइज़ेशन, मेमोरी आवंटन और मुक्त करने आदि का उपयोग करते हुए कच्चे फ़ील्ड ऑफ़सेट्स प्राप्त करने और लिखने के तरीके हैं। यह सामान्य जावा प्रोग्रामर द्वारा उपयोग करने का इरादा नहीं है; यह undocumented, कार्यान्वयन-विशिष्ट, और स्वाभाविक रूप से असुरक्षित (इसलिए नाम!) है। इसके अलावा, मुझे लगता है कि SecurityManager प्रबंधक लगभग सभी मामलों में इसे एक्सेस करने की अनुमति नहीं देगा I

संक्षेप में, यह मुख्य रूप से पुस्तकालय कार्यान्वयनकर्ताओं को मूलभूत मशीन तक पहुंचने के लिए अनुमति देता है, बिना AtomicInteger जैसे कुछ वर्गों में हर विधि को घोषित करने के लिए। आपको नियमित जावा प्रोग्रामिंग में इसका उपयोग करने या चिंता करने की ज़रूरत नहीं है, क्योंकि संपूर्ण बिंदु बाकी सभी पुस्तकालयों को तेजी से बनाने के लिए है ताकि आपको इस प्रकार की पहुंच की जरूरत न पड़े।

ऑफ-हेप संग्रह भारी मात्रा में मेमोरी आवंटित करने और जीसी हस्तक्षेप के बिना उपयोग के तुरंत बाद इसे वितरित करने के लिए उपयोगी हो सकता है। मैंने sun.misc.Unsafe आधार पर ऑफ-हेप एरेज़ / सूचियों के साथ काम करने के लिए एक पुस्तकालय लिखा था। sun.misc.Unsafe

कस्टम संगामिति नियंत्रण संरचनाओं और सहकारी शेड्यूलिंग तंत्र के निर्माण के लिए Unsafe.park() और Unsafe.unpark()

हमने असुरक्षितों का उपयोग करते हुए एरे, हैशमैप्स, ट्रीमैप जैसे विशाल संग्रह कार्यान्वित किए हैं।
और विखंडन को कम करने / कम करने के लिए, हमने स्मृति अलोकेटर को डीएलएमएलएलक की अवधारणाओं से असुरक्षित पर लागू किया है।
यह संगामिति में प्रदर्शन हासिल करने में हमें मदद करता है

इसका इस्तेमाल खुद नहीं किया है, लेकिन मुझे लगता है कि अगर आपके पास एक चर है जो केवल एक ही धागे से ही कभी-कभी पढ़ा जाता है (इसलिए आप वास्तव में इसे अस्थिर नहीं करना चाहते हैं) तो आप इसे मुख्य थ्रेड में लिखते समय putObjectVolatile उपयोग कर सकते हैं और अन्य धागे से दुर्लभ readObjectVolatile करते समय readObjectVolatile पढ़ता है

इसका उपयोग का एक उदाहरण यादृच्छिक विधि है, जो बीजों को बदलने के लिए असुरक्षित कहता है ।

इस साइट पर इसके कुछ उपयोग भी हैं ।

वस्तु को निम्न स्तर पर काम करने के लिए उपलब्धता होने के लिए प्रतीत होता है जो सामान्यतः जावा कोड के लिए अनुमति देता है। यदि आप एक उच्च स्तरीय अनुप्रयोग कोडिंग कर रहे हैं तो जेवीएम मेमोरी से निपटने और अन्य कार्यों को कोड स्तर से दूर कर देता है ताकि कार्यक्रम में आसान हो। असुरक्षित पुस्तकालय का उपयोग करके आप प्रभावी ढंग से निम्न-स्तर के संचालन को पूरा कर रहे हैं जो आमतौर पर आपके लिए किया जाएगा।

जैसा कि वाल्विइराज ने कहा "यादृच्छिक ()" बीज को असुरक्षित का उपयोग करता है, वैसे ही कई अन्य अभियान असुरक्षित में शामिल आवंटित स्मृति () फ़ंक्शन का उपयोग करेंगे।

एक प्रोग्रामर के रूप में आप संभवत: इस पुस्तकालय की ज़रूरत के बिना भाग ले सकते हैं लेकिन कम-स्तरीय तत्वों पर सख्त नियंत्रण होने में काम आता है (यही कारण है कि विधानसभा अभी भी है और (कम हद तक) प्रमुख उत्पादों में सी कोड बहती है)

आपको इसकी ज़रूरत है अगर आपको उस कक्षा में से किसी एक द्वारा प्रदान की जाने वाली कार्यक्षमता को बदलने की आवश्यकता है जो इसे वर्तमान में उपयोग करता है

यह कस्टम / तेज / अधिक कॉम्पैक्ट सीरियललाइज़ेशन / डेसरियालाइजेशन, बायटबफर के एक तेज / बड़ा बफर / पुनरावर्तनीय संस्करण हो सकता है, या कोई परमाणु वैरिएबल भी जोड़ सकता है जैसे वर्तमान में कोई समर्थित नहीं है

मैंने इसे कुछ समय के लिए इस्तेमाल किया है।