首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM是否可以优化引用到null ( null类型的实例)所需的内存?

JVM是否可以优化引用到null ( null类型的实例)所需的内存?
EN

Stack Overflow用户
提问于 2012-01-30 06:11:19
回答 1查看 67关注 0票数 0

大家下午好,

我有一门课是这样的:

代码语言:javascript
复制
public class Grapheme {
    public Grapheme(int[] code_points) {
        this.code_points = code_points;
    }
    int[] code_points;
}

从bdonlan 链接提供的下面中,我了解到一个图形素对象通常需要8个字节的对象头、4个字节的变量code_points (其类型是引用)和4个字节的填充。

因此,如果我使用代码new Grapheme(null)创建一个字形素的实例,该字形素的实例通常需要总共16个字节。因为它是否是16字节是特定于实现的,所以从这里开始,我将这个数字称为x字节。

基本上,我想知道我是否创建了n个图形位元,将null传递给所有这些图形的构造函数Grapheme(int[]),并将这些图形符号存储到一个长度为n的数组中,

运行时所需的总内存(用于存储图形素实例)是否严格为n*x字节?

或者,是否有可能使尝试进行一些神奇的优化,使所需内存小于n*x字节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 06:39:05

不是的。对象的大小是固定的。考虑一下--如果JVM确实将图形符号打包到一个没有空格的数组中,那么如果一些代码后来更改了code_points的值,会发生什么?它必须移动所有其他图形,并重写指向其中任何一个的指针。这将是一个巨大的性能打击(您可能需要执行一个完整的GC来重写所有这些指针.),对于试图找出为什么简单的任务如此缓慢的程序员来说,这是完全无法理解的。因此JVM不进行这类优化。

还需要注意的是,您的开销估计值有点偏低。根据此页,对象的开销为8字节,加上任何内部字段的空间为12字节。然后将其舍入为8字节的倍数,因此在32位平台和Hotspot JVM上,您的图形素对象总共将是16个字节。指向该石墨素对象的任何指针都将占用额外的空间(每个可能占用4个字节)。对象本身不需要为自己的地址留出空间;该内存属于其他东西(例如堆栈框架或其他对象)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9060033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档