美文网首页
java 内存计算

java 内存计算

作者: chonh | 来源:发表于2017-12-19 17:37 被阅读0次

一、计算java对象在内存中占用的大小

来源:https://www.coursera.org/learn/algorithms-part1/supplement/mpK20/lecture-slides

二、实例说明:

以下为双向列队Deque.java

import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;

import java.util.Iterator;
import java.util.NoSuchElementException;

public class Deque<Item> implements Iterable<Item> {

    private int size;
    private final Node sentinel;

    private class Node {
        Node next;
        Node prev;
        Item item;

        Node() {
        }

        Node(Item item, Node prev, Node next) {
            this.item = item;
            this.prev = prev;
            this.next = next;
        }
    }

    public Deque() {
        sentinel = new Node();
        sentinel.next = sentinel;
        sentinel.prev = sentinel;
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public int size() {
        return size;
    }

    public void addFirst(Item item) {
        if (item == null) throw new IllegalArgumentException("Cannot add null");
        Node newNode = new Node(item, sentinel, sentinel.next);
        sentinel.next.prev = newNode;
        sentinel.next = newNode;
        size++;
    }

    public void addLast(Item item) {
        if (item == null) throw new IllegalArgumentException("Cannot add null");
        Node newNode = new Node(item, sentinel.prev, sentinel);
        sentinel.prev.next = newNode;
        sentinel.prev = newNode;
        size++;
    }

    public Item removeFirst() {
        if (size == 0) throw new NoSuchElementException("Stack underflow");
        Item oldItem = sentinel.next.item;
        sentinel.next.next.prev = sentinel;
        sentinel.next = sentinel.next.next;
        size--;
        return oldItem;
    }

    public Item removeLast() {
        if (size == 0) throw new NoSuchElementException("Stack underflow");
        Item oldItem = sentinel.prev.item;
        sentinel.prev.prev.next = sentinel;
        sentinel.prev = sentinel.prev.prev;
        size--;
        return oldItem;
    }

    public Iterator<Item> iterator() {
        return new DequeIterator();
    }

    private class DequeIterator implements Iterator<Item> {
        private Node first;
        private int count;

        private DequeIterator() {
            first = sentinel;
            count = size();
        }

        @Override
        public boolean hasNext() {
            return !(count == 0);
        }

        @Override
        public Item next() {
            if (count == 0) throw new NoSuchElementException("Stack underflow");
            Item item = first.next.item;
            first = first.next;
            count--;
            return item;
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException("the operation of remove is not supported");
        }
    }
  • 当使用一Deque对象增加nItem后,该Deque对象所占用的内存大小为:48n + 80 字节
    • Object overhead: 16
    • 内部类Node的大小: 48
      • Object overhead:16
      • 变量next,prev,Item: 3 * 8 = 24
      • 外部类指针: 8
      • padding:0
    • 变量size: 4
    • 变量sentinel: 8
    • sentinel变量指向的Node对象: 48 * 1 = 48
    • padding: 4

相关文章

  • 深入理解volatile

    JMM Java 内存模型 Java的内存模型指定了Java虚拟机如何与计算机的内存进行工作 Java内存模型决定...

  • Java JMM(Java内存模型)、JVM(JVM内存模型)

    Java内存模型(Java Memory Mode,JMM) Java的内存模型指定了Java虚拟机如何与计算机的...

  • java虚拟机-内存模型与线程

    一、java内存模型 java定义的内存模型是类似物理计算机的三级缓存模型 1.主内存与工作内存 java内存模型...

  • 计算机存储系统(RAM)/JMM(JavaMemoryModel

    Jvm内存结构Java内存模型Java内存区域及对象Java内存模型2 1. 硬件存储体系结构 当代计算机通常是多...

  • 【转】Java 内存模型

    转自Java 内存模型 Java 内存模型规范了 Java 虚拟机与计算机内存是如何协同工作的。Java 虚拟机是...

  • 《java并发编程实战》之java内存模型

    “如欲征服java并发,需先征服java内存模型,如欲征服java内存模型,需先征服计算机内存模型” -awork...

  • 2. Java内存模型

    Java内存模型指定了JVM和计算机内存是如何进行协作 Java内存模型的原理 Java内存被分为线程栈和堆栈:J...

  • Java高并发之内存模型

    概述 Java内存模型指定Java虚拟机如何与计算机的内存(RAM)一起使用。Java虚拟机是整个计算机的模型,因...

  • java 内存计算

    一、计算java对象在内存中占用的大小 来源:https://www.coursera.org/learn/alg...

  • Java 内存模式

    Java 内存模式 Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计...

网友评论

      本文标题:java 内存计算

      本文链接:https://www.haomeiwen.com/subject/bdriwxtx.html