मैं मैप किए गएबेट बफर का उपयोग फ़ाइल पढ़ने/लिखने के संचालन() को तेज़ करने के लिए कर रहा हूं। मेरे प्रश्न नीचे दिए गए हैं:क्या हमें डिस्क पर डेटा फ्लश करने के लिए मैप्डबेट Buffer.force() का उपयोग करने की आवश्यकता है?
मुझे यकीन नहीं है कि मुझे डिस्क पर सामग्री को फ्लश करने के लिए .force() विधि का उपयोग करने की आवश्यकता है या नहीं। ऐसा लगता है .force(), .getInt() अभी भी पूरी तरह से काम कर सकता है (ठीक है, क्योंकि यह एक मेमोरी-मैप किए गए बफर है, मुझे लगता है .getInt() डिस्क से डेटा प्राप्त करता है, जिसका अर्थ है कि डेटा को फ़्लश कर दिया गया है डिस्क पहले से ही।
.force() विधि एक अवरुद्ध विधि है एक अवरुद्ध विधि एक तुल्यकालन ब्लॉक है?
?
वहाँ के साथ या .force बुला बिना (एक विशाल प्रदर्शन का अंतर है) विधि। कॉलिंग .force() को मैन्युअल रूप से कॉल करने का क्या फायदा है? किस स्थिति के तहत हम इसका इस्तेमाल कर सकते हैं? मुझे लगता है कि इसे कॉल किए बिना, डेटा अभी भी दृश्य के पीछे डिस्क पर लिखा जाएगा।
अगर हमें कॉल करने की आवश्यकता है .force(), इसे किसी अन्य धागे से कॉल करने से प्रदर्शन में सुधार करने में मदद मिलेगी? क्या यह सिंक्रनाइज़ेशन समस्या के कारण डेटा दूषित करेगा?
आयात java.io.FileNotFoundException; आयात java.io.IOException; आयात java.io.RandomAccessFile; आयात java.nio.MappedByteBuffer आयात; आयात java.nio.channels.FileChannel; आयात java.nio.channels.FileChannel.MapMode;
सार्वजनिक वर्ग मुख्य {
public static void main(String[] args) throws IOException {
System.out.println("start");
RandomAccessFile raf = new RandomAccessFile("test.map", "rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE, 0, 2000000);
int total = 0;
long startTime = System.currentTimeMillis();
for (int i = 0; i < 2000000; i += 4) {
mbb.putInt(i, i);
//mbb.force();
total += mbb.getInt(i);
}
long stopTime = System.currentTimeMillis();
System.out.println(total);
System.out.println(stopTime - startTime);
System.out.println("stop");
}
}
जेडीके का संस्करण? (यह नहीं कि यह वास्तव में बहुत बदल गया है) –
मुझे नहीं लगता कि इससे क्या अंतर आएगा। – EJP
जावाडोक को देखने के बाद कोई नहीं :-) –