java中用byte[]数组实现的队列和用Byte[]实现的队列实际占用空间对比
生活随笔
收集整理的這篇文章主要介紹了
java中用byte[]数组实现的队列和用Byte[]实现的队列实际占用空间对比
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我用byte[]實現了一個隊列,創建對象,也用ArrayBlockingQueue<Byte>創建對象,添加10M個byte/Byte后通過對象流輸出到文件,文件的大小可以代表對象的大小,一探java裝箱額外占用空間的大小。
測試代碼:
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.Queue; import java.util.Scanner; import java.util.concurrent.ArrayBlockingQueue;import com.idealisan.structure.ArrayBlockingByteValueQueue;public class TestMen {static int capacity = 1024 * 1024 * 10;public static void main(String[] args) {ArrayBlockingQueue<Byte> pointerQueue = new ArrayBlockingQueue<Byte>(capacity);ArrayBlockingByteValueQueue valueQueue = new ArrayBlockingByteValueQueue(capacity);fillQueue(valueQueue);FileOutputStream os;try {os = new FileOutputStream(new File("F:/ttt/value10.dat"));ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(valueQueue);oos.flush();oos.close();os.flush();os.close();} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}valueQueue = null;fillQueue(pointerQueue);try {os = new FileOutputStream(new File("F:/ttt/pointer10.dat"));ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(pointerQueue);oos.flush();oos.close();os.flush();os.close();} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}pointerQueue = null;}private static void fillQueue(Queue<Byte> queue) {while (queue.size() < capacity) {queue.offer(new Byte((byte) 1));}} }最后的結果是裝箱的Byte多使用了600%的空間,當然,一般不會有10M個對象那么多,也很少會讓每個字節成為一個單獨的對象,太浪費空間了。其中值類型的byte也額外使用了大約1kB的空間,應該是用于存放容器對象的信息。
?
轉載于:https://www.cnblogs.com/memoryLost/p/11114883.html
總結
以上是生活随笔為你收集整理的java中用byte[]数组实现的队列和用Byte[]实现的队列实际占用空间对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ADSL pppoe 拔号工具rp-pp
- 下一篇: Springboot跨域 ajax js