在java程序中,对象的占用内存大小,在jdk中没有给出具体的方法,java的内存管理是由JVM管理的,但是,从优化程序的角度来说,应该知道在程序中每个对象所占内存的大小,这样才可以有针对性的来优化程序,提交程序的运行速度,优化系统的结构,提高对程序的认识高度。
基本数据类型:如byte,int,char,boolean所占的大小是固定的
基本型别
|
大小
|
最小值
|
最大值
|
boolean
|
-----
|
-----
|
------
|
char
|
16-bit
|
Unicode 0
|
Unicode 2^16-1
|
byte
|
8-bit
|
-128
|
+127
|
short
|
16-bit
|
-2^15
|
+2^15-1
|
int
|
32-bit
|
-2^31
|
+2^31-1
|
long
|
64-bit
|
-2^63
|
+2^63-1
|
float
|
32-bit
|
IEEE754
|
IEEE754
|
double
|
64-bit
|
IEEE754
|
IEEE754
|
void
|
|
|
|
注意!:表格里的^代表的是次方哈~,1byte=8bit(1字节=8位)
一个空Object的大小是8byte,Object o = new Object(),它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。
有了Object对象的大小,我们就可以计算其他对象的大小了。
Class
NewObject { int
count; boolean flag
; Object ob; }
其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。
这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空间),而且12byte没有包含任何有效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占用是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张(随便想下就知道了)。因此,可能的话应尽量少使用包装类。在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方面进行相应的优化。
部分内容转自:http://pengjiaheng.iteye.com/
分享到:
相关推荐
随想出题是一款专为教育领域设计的软件,其免费版提供了基础的试题生成与管理功能,旨在帮助教师和学生更便捷地进行教学活动。这款软件的核心特点是简单易用,功能实用,尤其适合家庭学习和课堂教学环境。 1. **...
编程随想博客文集 2010
编程随想博客文集 2009
内容概要:这是关于作者针对自己的代码学习笔记《代码随想录》,进行两年后的全面更新与汇总的一则公告。新的PDF版本整合了所有最新内容,并修复和完善了一系列题目解释。尽管如此,作者仍推荐优先在网站上阅读以...
代码随想录是一个致力于帮助程序员提高编程能力的网站,提供了大量的题目和解题思路供学习和参考。本文主要介绍代码随想录的刷题笔记记录,方便读者更好地利用该网站进行学习。 ## 刷题笔记记录的作用 刷题笔记...
《软件随想录》是一本深入探讨软件开发与管理的经典著作,它涵盖了软件工程的多个重要方面,旨在为读者提供对软件行业的深度洞察。作者通过一系列的随笔和思考,揭示了软件开发过程中的关键问题、挑战以及解决之道。...
编程随想博客匿名术文集 2009~2015
1. **软件设计原则**:书中强调了设计的重要性,包括模块化、抽象、封装、继承和多态等面向对象设计的基本原则。这些原则有助于提高代码的可读性、可维护性和可扩展性,降低软件的复杂度。 2. **重构**:Martin ...
代码随想录贪心算法知识,非常管用
9. **C++编程技巧**:包括面向对象编程、模板元编程、STL(标准模板库)的使用、异常处理等C++高级特性,这些技巧对于编写高效的C++代码至关重要。 10. **算法设计与分析**:学习如何分析算法的时间复杂度和空间...
随想日语晶典2004注册器.exe 随想日语晶典2004注册器.exe 随想日语晶典2004注册器.exe
《代码随想录》是一本深受程序员喜爱的算法学习书籍,其PDF版本为读者提供了方便的电子阅读体验。这本书主要针对准备参加编程面试或者想要提升自己算法能力的开发者,通过实例解析和实战演练,帮助读者深入理解算法...
「代码随想录」二叉树专题精讲(v2.0)是一套涵盖二叉树基础知识、遍历算法、递归与非递归实现、BST、AVL树等内容的视频课程,由著名程序员博主「代码随想」老师主讲。该课程分为三个部分: 基础篇:介绍了二叉树的...
随想表达式运算控件可以使您的应用程序轻松具备用户自定义运算功能。使您开发通用、强大的数据处理系统、电子表格系统成为可能。 目前,随想表达式运算控件支持的运算有: 1.四则混合运算 2.括号 3.以下基本...
软件随想录_扫描版_5.79M
《代码随想录》是一本深受程序员喜爱的编程学习资料,尤其在算法领域,它提供了丰富的实例和深入的解析,帮助读者理解并掌握动态规划、回溯、递归、二叉树以及贪心等核心算法。这些算法是解决复杂计算问题的基础工具...
《代码随想录》是一本深受程序员喜爱的书籍,尤其对于即将参加秋季招聘的计算机科学和技术专业的学生们来说,它是提升编程技能和算法能力的重要资源。这本书深入浅出地讲解了编程思维和各种常见算法,旨在帮助读者...
书中可能讨论了面向对象设计原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP),以及设计模式的应用,如工厂模式、观察者模式、策略模式等。...
3. 编程范式:过程式编程、面向对象编程、函数式编程等。 4. 设计模式:常用的设计模式,如工厂模式、单例模式、策略模式等。 5. 软件架构:微服务架构、SOA(面向服务的架构)、MVC(模型-视图-控制器)架构等。 6....
随想命令按钮控件V3.0 Build 0401是一个专为开发者设计的软件组件,用于在应用程序中创建和定制独特的用户界面元素,尤其是命令按钮。这个控件提供了比标准Windows控件更丰富的功能和自定义选项,使得开发者能够以...