zoukankan      html  css  js  c++  java
  • java 对象占用内存

    String 方法用于文本分析及大量字符串处理时会对内存性能造成一些影响。可能导致内存占用太大甚至OOM。

    一、先介绍一下String对象的内存占用

    一般而言,Java 对象在虚拟机的结构如下:
    •对象头(object header):8 个字节(保存对象的 class 信息、ID、在虚拟机中的状态)
    •Java 原始类型数据:如 int, float, char 等类型的数据
    •引用(reference):4 个字节
    •填充符(padding)

    String定义:

    JDK6:
    private final char value[];
    private final int offset;
    private final int count;
    private int hash;

    JDK6的空字符串所占的空间为40字节

    JDK7:
    private final char value[];
    private int hash;
    private transient int hash32;

    JDK7的空字符串所占的空间也是40字节

    JDK6字符串内存占用的计算方式:
    首先计算一个空的 char 数组所占空间,在 Java 里数组也是对象,因而数组也有对象头,故一个数组所占的空间为对象头所占的空间加上数组长度,即 8 + 4 = 12 字节 , 经过填充后为 16 字节。

    那么一个空 String 所占空间为:

    对象头(8 字节)+ char 数组(16 字节)+ 3 个 int(3 × 4 = 12 字节)+1 个 char 数组的引用 (4 字节 ) = 40 字节。

    因此一个实际的 String 所占空间的计算公式如下:

    8*( ( 8+12+2*n+4+12)+7 ) / 8 = 8*(int) ( ( ( (n) *2 )+43) /8 )

    其中,n 为字符串长度。

    http://lin-yp.iteye.com/blog/1683679

  • 相关阅读:
    Mac php使用gd库出错 Call to undefined function imagettftext()
    centos 使用 locate
    Mac HomeBrew 安装 mysql
    zsh 命令提示符 PROMPT
    新的开始
    Java 面试题分析
    Java NIO Show All Files
    正确使用 Volatile 变量
    面试题整理 2017
    有10阶梯, 每次走1,2 or 3 阶,有多少种方式???
  • 原文地址:https://www.cnblogs.com/SamuelSun/p/5133115.html
Copyright © 2011-2022 走看看