JVM虚拟机

JVM使用根可达性算法进行垃圾回收,未被引用的对象会被回收。GCRoots包括虚拟机栈、方法区的静态属性和常量引用、本地方法栈的JNI引用。一个新创建的Object对象,在开启压缩情况下,占用16字节,包括markword、classpointer和padding;未开启压缩时,同样占用16字节,但classpointer为8字节。
摘要由CSDN通过智能技术生成

JVM虚拟机基础信息

在这里插入图片描述

对象什么时候可以被垃圾回收

根据根可达性算法 如过从根节点出发,一直查询相关的引用对象,没有被引用的对象就直接被垃圾回收

在Java语言中,可以作为GCRoots的对象包括下面几种:

(1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。

(2). 方法区中的类静态属性引用的对象。

(3). 方法区中常量引用的对象。

(4). 本地方法栈中JNI(Native方法)引用的对象。

Object object = new Object()在内存中占用多少字节?(对象在 内存中的存储布局)

在这里插入图片描述

  • markword :存放锁的信息,GC标记信息,分代年龄

  • class pointer: 存放类的指针(这个对象属于哪个class的?)

  • instance data:你的成员变量所占的地方

  • padding:当整体字节数不能被 8整除的时候补到8的倍数(因为总线的宽度是8可以提高效率)

java 中默认会开启compressescClassPointers 会把64位(8个字节)的指针压缩成4个字节

所以回答这个问题:
在开启压缩的情况下
Object对象的
markword占用了8个字节
class pointer占用了4个字节
instance data占用了0个字节(Object对象没有成员变量)
padding:占用了4个字节(8+4+4=16)
共 16字节
在没有开启压缩的情况下
Object对象的
markword占用了8个字节
class pointer占用了8个字节
instance data占用了0个字节(Object对象没有成员变量)
padding:占用了0个字节
共 16字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值