美文网首页
java对象原型

java对象原型

作者: 粽十三丶 | 来源:发表于2021-04-12 15:18 被阅读0次

java对象从宏观上来看,简单的由类名,属性,方法组成

在创建(new)对象时,一个对象由对象头,属性值,填充数据组成

做一个测试

1.导入包

    <dependency>

<groupId>org.openjdk.jol</groupId>

<artifactId>jol-core</artifactId>

<version>0.9</version>

</dependency>

2.写一个main方法输出打印

public static void main(String[] args) {

String s = ClassLayout.parseInstance(new L()).toPrintable();

System.out.println(s);

}

public class L{

    int a ;

}

3.运行控制输出:

lock.L object internals:

OFFSET  SIZE  TYPE DESCRIPTION                              VALUE

      0    4        (object header)                          01 00 00 00 (00000001 00000000 00000000 00000000) (1)

      4    4        (object header)                          00 00 00 00 (00000000 00000000 00000000 00000000) (0)

      8    4        (object header)                          18 0a 94 16 (00011000 00001010 10010100 00010110) (378800664)

    12    4    int L.a1                                  0

Instance size: 16 bytes

Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

object header为对象头,一个占用4字节,三个占用12字节,int属性a占用4字节 共16个字节

那么现在把int替换成boolean呢

输出:

lock.L object internals:

OFFSET  SIZE      TYPE DESCRIPTION                              VALUE

      0    4          (object header)                          01 00 00 00 (00000001 00000000 00000000 00000000) (1)

      4    4          (object header)                          00 00 00 00 (00000000 00000000 00000000 00000000) (0)

      8    4          (object header)                          18 0a 9a 16 (00011000 00001010 10011010 00010110) (379193880)

    12    1  boolean L.flag                                    false

    13    3          (loss due to the next object alignment)

Instance size: 16 bytes

Space losses: 0 bytes internal + 3 bytes external = 3 bytes total

一个boolean对象占用1个字节,此时共13字节,然后新增了3字节的填充数据

此时我的操作系统为86bit,那么jvm的规范每个对象大小必须为8的倍数,所以补充了3字节的填充数据用来对齐

相关文章

  • java对象原型

    java对象从宏观上来看,简单的由类名,属性,方法组成 在创建(new)对象时,一个对象由对象头,属性值,填充数据...

  • JavaScript Class 完全指南

    JavaScript 使用原型继承:每个对象都从原型对象继承属性和方法。 Java 或 Swift 等语言中作为创...

  • 设计模式系列-原型模式,备忘录模式

    原型模式 定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式已经与Java融为一体...

  • 原型模式

    由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。 1. 模式的结构 原型...

  • 设计模式五--原型模式

    定义 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象 原型模式角色 java中内置克隆机制(Obj...

  • PrototypePattern原型模式

    原型模式 1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Java自带一个Cloneab...

  • 原型模式

    1.定义# 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。在JAVA中通过继承Clonealbe...

  • javaScript系列 [03]-javaScript原型对象

    引用: javaScript是一门基于原型的语言,它允许对象通过原型链引用另一个对象来构建对象中的复杂性,Java...

  • 原型链以及继承

    原型链 原型链类似关系链,几乎所有的js对象都会有通过原型链prototype继承过来的方法或者属性,在java和...

  • 2021-04-07

    JS中的构造函数、原型、原型链 在典型的OOP的语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类...

网友评论

      本文标题:java对象原型

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