java普通对象的内存分配

java 普通对象,内存分配, 。数组类型 会多个数组长度表示,占用的长度是系统位宽

 组成部分:头+实例数据+填充(保证整体字节数量是8的倍数)

对象头:包含两部分: markword+ 类型指针(确定对象是哪个类的实例,不一定都有,看虚拟机实现)

1,对象头

   1.1markword:   32位系统  4个字节;  64位系统:8字节。

   此部分,数据结构不固定,根据加锁情况,存储内容会变化。

   32位系统:25bit+4bit(分代年龄)+2bit(锁标识)+1bit(固定0)     

    分代年龄:垃圾回收,进入老年代判断使用。4bit决定 取值范围0-15。年轻代每回收一次+1

        不是都到15了才进入。大对象,动态分代年龄(当Survivor区 相同年龄 的所有对象 合计大于Survivor空间的一半,年龄大于或等于该平均年龄值的对象,可直接进入老年代 )

  说明: Survivor 。一级分类:年轻代+old。年轻代:eden+Survivor,Survivor:from+to(复制算法 设计如此,垃圾回收时用来交换)。

比列一般情况:eden(1/3*0.8)+from(1/3*0.1)+to(1/3*0.1)+old(2/3)

     锁标识:无锁,偏向锁,轻量级,重量级

 1.2类型指针kclass
       32位系统:4个字节。64位系统:不开启指针压缩8字节,开启后时4个字节。

2,实例数据

      基本类型: boolean, byte 1. short. char 2  int float 4 double,long 8

     引用类型: 32位系统:4个字节。64位,不开启指针压缩是8字节,开启后时4个字节。

    总结,实例数据部分, 基本类型,32位和64位系统 内存分配长度一样。1,2,4,8

    引用类型,32位系统,32位。64位,不开启压缩是64位,开启是32位

3,填充部分:0-7 字节

说明,指针压缩参数:jdk1.6 update14开始,64系统 jvm支持指针压缩。启用指针压缩-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOops

oop(ordinary object pointer)  对象指针的意思。

面试题:

 Object obj =new Object();    内存占用。

单说 对象内存分配,不考虑引用obj,根据前面讲解分析,32位系统 8个字节。64位系统16个字节。

参考:

 https://www.iteye.com/blog/icyfenix-1145044

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中循环创建新对象的性能问题主要取决于两个因素:内存分配和垃圾回收。每次循环创建新对象时,都会涉及内存的分配和释放,这会导致一定的性能开销。 在循环中频繁地创建新对象可能会导致内存碎片化,使垃圾回收器的效率下降。因此,为了提高性能,可以考虑以下优化策略: 1. 使用对象池:可以提前创建一批对象并将其放入对象池中,在循环中重复使用这些对象,而不是每次都创建新对象。这样可以减少内存分配和垃圾回收的开销。 2. 使用StringBuilder或StringBuffer:如果在循环中需要频繁地拼接字符串,应使用StringBuilder(或StringBuffer,线程安全的版本)来代替普通的字符串拼接操作。这样可以避免频繁地创建新字符串对象。 3. 对象复用:如果在循环中需要创建大量对象,可以考虑重用已经存在的对象,而不是每次都创建新对象。比如,可以使用对象池或者设计模式中的享元模式来复用对象。 4. 减少对象的作用域:尽量将对象的作用域限制在循环内部,避免在循环外部引用对象,这样可以减少对象的生命周期,帮助垃圾回收器更早地回收对象。 5. 使用基本数据类型:如果可能的话,将对象替换为基本数据类型,因为基本数据类型的创建和销毁开销较小。 总之,为了提高循环中创建新对象的性能,应该尽量减少内存分配和垃圾回收的开销,并尽量复用已有的对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值