मैं जावा में FileOutputStream कक्षा के लिए स्रोत कोड की जाँच कर रहा था और मैंने कुछ मूल तरीकों पर ध्यान दिया। देशी तरीकों के बारे में मेरी समझ में कहीं न कहीं System.loadLibrary() पर कॉल होना चाहिए, लेकिन मैं इसे JDK स्रोत में कहीं भी नहीं ढूंढ सकता। मैं गतिशील पुस्तकालय ढूंढना चाहता हूं जिसमें मूल विधियों का कार्यान्वयन शामिल है और System.loadLibrary() को वास्तविक कॉल भी देखें। क्या कोई मदद कर सकता है?

संपादित करें:

अपने प्रश्न को फिर से लिखने के लिए, मैं यह जानना चाहता हूं कि JDK loadLibrary के बिना मूल कोड कैसे लोड करता है और वास्तव में यह देखने के लिए कि रिपॉजिटरी में कहां कॉन्फ़िगर किया गया है।

स्रोत का लिंक: https://github.com/openjdk-mirror/jdk7u-jdk

2
Michael Munta 5 मई 2020, 15:47
आपका प्रश्न का डुप्लिकेट है .com/questions/54085467/…
 – 
JohannesB
9 मई 2020, 21:26

2 जवाब

FileOutputStream में मूल विधियों के कार्यान्वयन JVM में शामिल हैं। System.loadLibrary() बाहरी पुस्तकालयों के साथ प्रयोग किया जाता है जिन्हें अलग से लोड करने की आवश्यकता होती है - जब मूल विधियों को पहले से ही JVM में संकलित किया जाता है तो इसकी आवश्यकता नहीं होती है।

आप स्रोत कोड को के उल्लेख के लिए स्रोत कोड खोज कर देख सकते हैं। C भाषा में "FileOutputStream"

कार्यान्वयन प्लेटफ़ॉर्म विशिष्ट है: उदाहरण के लिए, विंडोज़ के लिए आपको FileOutputStream_md.c जो io_util_md.c

0
Joni 5 मई 2020, 18:12
पहले से ही JVM में संकलित करके आपका क्या मतलब है? मैं अपने कोड में System.loadLibrary() से कैसे बच पाऊंगा?
 – 
Michael Munta
6 मई 2020, 12:21
विशेष रूप से, मैं उस भंडार में देखना चाहता हूं जहां यह सी कार्यान्वयन "लोड" है।
 – 
Michael Munta
6 मई 2020, 15:12
JVM के मूल और गैर-देशी भाग हैं, गैर-देशी भाग (जो जावा में लिखा गया है) जैसे 'FileOutputStream' वर्ग 'देशी' संशोधक के साथ विधियों के माध्यम से मूल भाग में कॉल का उपयोग करता है। 'System.loadLibrary ()' कॉल बाहरी पुस्तकालयों के लिए है, जो JVM का हिस्सा नहीं हैं। लेकिन बाहरी मूल पुस्तकालय को जावा ऑब्जेक्ट से जोड़ने के लिए आपको जावा विधि पर 'मूल' संशोधक का उपयोग करने की भी आवश्यकता है, इसलिए शायद यह आपको भ्रमित कर दे।
 – 
Alex Chernyshev
7 मई 2020, 17:50
मैं समझता हूं, लेकिन भंडार में कुछ मेकफ़ाइल या कुछ होना चाहिए जो इस फ़ाइल का संदर्भ देता है, है ना?
 – 
Michael Munta
7 मई 2020, 21:11
JDK बिल्ड प्रक्रिया बहुत जटिल है, निश्चित रूप से कुछ मेक फाइलें हैं, लेकिन वे कुछ छोटे स्टैंडअलोन ऐप से बहुत दूर हैं, जैसा कि आप उदाहरणों में देख सकते हैं। आप वास्तव में क्या खोजने या हल करने की कोशिश कर रहे हैं?
 – 
Alex Chernyshev
11 मई 2020, 19:45
  1. jdk7u भंडार अप्रचलित है। इसे 8 साल से अधिक समय से अपडेट नहीं किया गया है। अप-टू-डेट रिपॉजिटरी https://hg.openjdk.java.net पर है /jdk/jdk/फ़ाइल

  2. FileOutputStream विधियों का मूल कार्यान्वयन यहां

  3. जैसा कि पथ से पता चलता है, यह मूल कोड libjava (libjava.so या java.dll) का हिस्सा है।

  4. libjava JVM नहीं है, लेकिन यह अभी भी जावा क्लास लाइब्रेरी का अनिवार्य हिस्सा है, क्योंकि इसमें java.lang.Class, java.lang.ClassLoader आदि जैसे बुनियादी वर्गों के लिए मूल तरीके शामिल हैं। यही कारण है कि JVM प्रीलोड करता है libjava बूटस्ट्रैप के दौरान, देखें ClassLoader::initialize.

  5. जब तक libjava JVM द्वारा बिना शर्त प्रीलोडेड है, तब तक System.loadLibrary को कॉल करने की कोई आवश्यकता नहीं है।

0
apangin 10 मई 2020, 04:44