Oleh kerana sistem pengendalian perlu mengasingkan ruang pengguna dan ruang sistem untuk melindungi keselamatan data Secara tepat, apabila sistem pengendalian membaca fail, ia membaca fail ke dalam ruang sistem dan kemudian menyalinnya kepada pengguna aplikasi. proses. Ruang, iaitu penimbal program sendiri seperti yang dinyatakan dalam soalan Jika proses pengguna dibenarkan untuk mengakses secara terus penimbal ruang sistem pengendalian, bukankah sistem pengendalian itu tidak selamat?
FileInputStream/FileOutputStream akan mencetuskan operasi IO setiap kali read()/write() dipanggil. Panggilan BufferedInputStream/BufferedOutputSteam read()/write() tidak akan mencetuskan operasi IO setiap kali Ia hanya menulis kepada penimbal dalaman Operasi IO hanya akan dicetuskan apabila penimbal dalaman penuh atau flush() dipanggil .
Semakin sedikit operasi IO, semakin baik prestasinya.
Apabila melakukan IO, JVM akan mencipta tatasusunan bait sebagai penimbal dalam ruang timbunannya sendiri Secara amnya, pengguna tidak boleh memanggil memori secara langsung (directbuffer) melalui JVM Interaksi antara penimbal ruang timbunan dan memori diuruskan oleh JVM itu. Dengan cara ini, kita boleh memanfaatkan kelebihan JVM, seperti mekanisme GC dan API berkapsul peringkat tinggi Java.
Sistem pengendalian bukan sahaja akan membaca fail pada cakera keras ke dalam memori dan menggunakannya sebagai cache, tetapi juga akan membuka ruang lain dalam memori untuk menyimpan data dalam memori. Apa gunanya? Untuk pengurusan dan kecekapan. Kadar pertukaran data antara memori dan memori adalah dua urutan magnitud lebih tinggi daripada kadar pertukaran data antara memori dan cakera keras. Apabila proses pada memori memerlukan data, jika terdapat data yang sepadan dalam cache memori, ia akan diambil terus dari kawasan cache Jika tidak, ia akan dibaca dari cakera keras. (Begitu juga dengan penulisan)
Kepentingan reka bentuk cache Java untuk operasi IO juga ada di sini Perbezaannya ialah data yang dicache oleh Java hanya boleh digunakan oleh persekitaran semasa Java. Berbanding dengan pengambilan data yang kerap daripada cache sistem pengendalian, ini meningkatkan kecekapan pelaksanaan Ini benar terutamanya apabila kod anda memerlukan operasi IO yang kerap.
Kebanyakan apa yang dipanggil penimbal dikapsulkan dalam kawasan antara muka oleh perkakasan cakera keras, dan kawasan penimbal tidak besar. Sistem pengendalian tidak menyimpan kandungan fail ke dalam memori.
Oleh kerana sistem pengendalian perlu mengasingkan ruang pengguna dan ruang sistem untuk melindungi keselamatan data Secara tepat, apabila sistem pengendalian membaca fail, ia membaca fail ke dalam ruang sistem dan kemudian menyalinnya kepada pengguna aplikasi. proses. Ruang, iaitu penimbal program sendiri seperti yang dinyatakan dalam soalan Jika proses pengguna dibenarkan untuk mengakses secara terus penimbal ruang sistem pengendalian, bukankah sistem pengendalian itu tidak selamat?
FileInputStream/FileOutputStream akan mencetuskan operasi IO setiap kali read()/write() dipanggil.
Panggilan BufferedInputStream/BufferedOutputSteam read()/write() tidak akan mencetuskan operasi IO setiap kali Ia hanya menulis kepada penimbal dalaman Operasi IO hanya akan dicetuskan apabila penimbal dalaman penuh atau flush() dipanggil .
Semakin sedikit operasi IO, semakin baik prestasinya.
Apabila melakukan IO, JVM akan mencipta tatasusunan bait sebagai penimbal dalam ruang timbunannya sendiri Secara amnya, pengguna tidak boleh memanggil memori secara langsung (directbuffer) melalui JVM Interaksi antara penimbal ruang timbunan dan memori diuruskan oleh JVM itu. Dengan cara ini, kita boleh memanfaatkan kelebihan JVM, seperti mekanisme GC dan API berkapsul peringkat tinggi Java.
Sistem pengendalian bukan sahaja akan membaca fail pada cakera keras ke dalam memori dan menggunakannya sebagai cache, tetapi juga akan membuka ruang lain dalam memori untuk menyimpan data dalam memori.
Apa gunanya? Untuk pengurusan dan kecekapan.
Kadar pertukaran data antara memori dan memori adalah dua urutan magnitud lebih tinggi daripada kadar pertukaran data antara memori dan cakera keras.
Apabila proses pada memori memerlukan data, jika terdapat data yang sepadan dalam cache memori, ia akan diambil terus dari kawasan cache
Jika tidak, ia akan dibaca dari cakera keras. (Begitu juga dengan penulisan)
Kepentingan reka bentuk cache Java untuk operasi IO juga ada di sini
Perbezaannya ialah data yang dicache oleh Java hanya boleh digunakan oleh persekitaran semasa Java.
Berbanding dengan pengambilan data yang kerap daripada cache sistem pengendalian, ini meningkatkan kecekapan pelaksanaan
Ini benar terutamanya apabila kod anda memerlukan operasi IO yang kerap.
Kebanyakan apa yang dipanggil penimbal dikapsulkan dalam kawasan antara muka oleh perkakasan cakera keras, dan kawasan penimbal tidak besar. Sistem pengendalian tidak menyimpan kandungan fail ke dalam memori.
Kerana cakera keras anda tidak cukup laju!