`

Java中为什么没有sizeof()

 
阅读更多

C/C++中,当我们想知道一个对象或者一个原始数据类型所占用的内存大小时,只需简单调用sizeof操作符即可,但是,在java中是没有相应的操作符或者方法来直接完成相应功能的。

sizeof C/C++得到大量的运用,是程序员必不可少的工具之一,那么为什么java却不提供呢?要回答这个问题,我们可以从另外一个角度来看,那就是为什么C/C++中要使用sizeof

C中要使用sizeof主要是因为C程序员要自己管理堆内存的分配和释放,在使用malloc来获取堆内存时,我们必须知道要创建的对象的具体大小,才能根据对象的具体大小从堆中分配相应大小的动态内存,而获取对象大小这个工作就是通过sizeof来完成的。

到了C++,我们可以使用操作符new来动态分配内存,这时,对于sizeof的依赖也没有在C时代时那么严重了。在C++中保留sizeof,主要是为了跟C保持兼容。

为什么java中为什么没有sizeof了?java中的内存管理任务直接交给了JVM,这比C++更为彻底。同时,java是一个全新设计的完全面向对象语言,不存在C++向下兼容的问题,因此,java中不存在类似sizeof的操作符。

但是,有些时候事情并不没有想象中那么简单。当我们用Java编写应用程序时,虽然很多时候我们都不需要了解内存的使用情况,因为JVM已经帮我们照顾好这些珍贵的资源,但是,某些时候,譬如我们要编写一个性能监测工具或者在调试时我们需要知道某个对象所占用的内存大小的。怎么办呢?是不是很怀念我们的sizeof呢。

不用担心,如果我们使用的JDK的版本是5.0或以上,那么,我们可以使用新提供的Instrument包。通过这个包提供的接口和类,我们可以很容易获取一个对象实际占用的内存大小。Instrument的具体描述可以参看JDK文档,但,Instrument包只能获取对象的占用内存的大小,对于int long等原始类型是没有办法得知其内存大小的。

java规范是对原是类型的大小作出了定义,但是这仅仅是对该类型逻辑上所需的字节作出了规定,具体到每个JVM实现中用到的实际内存大小是没有限制的。因此,要知道一个原始类型到底占用多少内存,我们还需另外想办法。

<!--EndFragment-->
分享到:
评论

相关推荐

    Java之基本数据类型 Sizeof 大小

    `Sizeof` 在Java中并不存在,与C++等语言不同,Java没有提供直接计算对象或变量在内存中占用字节数的内置方法。然而,我们可以探讨Java的基本数据类型及其内存占用。 1. **整型数据类型**: - `byte`: 占用1个字节...

    java 通过sizeOf计算一个对象的大小

    在Java编程语言中,了解一个对象的内存大小是很有用的,特别是在性能调优和...尽管Java API没有直接提供这样的功能,但我们可以借助第三方库或自定义工具来实现。理解对象大小对于优化内存使用和提升程序性能至关重要。

    java-sizeof-0.0.4:一个查看java对象占用内存大小

    本文将深入探讨Java中的对象内存占用,以及如何使用"java-sizeof-0.0.4"工具来查看Java对象在内存中的大小。 在Java中,内存主要分为堆内存(Heap)和栈内存(Stack)。对象通常存储在堆内存中,而基本类型的变量和...

    java-sizeof-0.0.5-API文档-中文版.zip

    赠送jar包:java-sizeof-0.0.5.jar; 赠送原API文档:java-sizeof-0.0.5-javadoc.jar; 赠送源代码:java-sizeof-0.0.5-sources.jar; 赠送Maven依赖信息文件:java-sizeof-0.0.5.pom; 包含翻译后的API文档:java-...

    java sizeof

    分享一个java中的sizeof工具。非常好用。 下载后,导入这个jar包。然后在run as中配置VM参数如下: -javaagent:C:\\***存放路径***\\SizeOf.jar(DEF**盘都可以的哈)

    java SizeOf 对象的大小

    NULL 博文链接:https://spice.iteye.com/blog/1104340

    java-sizeof-0.0.5.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【*...

    java-sizeof-0.0.5-API文档-中英对照版.zip

    赠送jar包:java-sizeof-0.0.5.jar; 赠送原API文档:java-sizeof-0.0.5-javadoc.jar; 赠送源代码:java-sizeof-0.0.5-sources.jar; 赠送Maven依赖信息文件:java-sizeof-0.0.5.pom; 包含翻译后的API文档:java-...

    SizeOf_0_2_2.zip_java

    标题 "SizeOf_0_2_2.zip_java" 指示的是一个针对Java语言的特定工具或库,它的主要功能是帮助开发者计算对象在内存中占用的空间大小。这个工具通常用于性能优化和内存管理,因为理解对象的大小对于有效地使用内存...

    SizeOf.jar

    SizeOf.jar就是用来解决这个问题的,它提供了一种方法来估算Java对象在内存中占用的空间。 SizeOf.jar的工作原理是通过反射API来遍历对象的所有字段,包括嵌套的对象和数组,然后计算每个字段所占的字节数。Java中...

    sizeof 计算出实例的大小

    在Java编程语言中,`sizeof`关键字并不像C++那样直接用于计算对象或类型的大小。Java没有提供内置的`sizeof`操作符,因为它的内存管理是自动的,由垃圾收集器(GC)处理。然而,程序员有时仍需要了解对象占用的内存...

    测定JVM中对象占用内存—SizeOf

    原项目下载地址:http://sourceforge.net/projects/sizeof/ ...1、将SizeOf.jar放到Eclipse工程路径下,添加到classpath中; 2、运行前添加VM参数:-javaagent:lib/SizeOf.jar 运行即可(将jar放在lib路径下)。

    Java详细总结(精辟版++)

    Java 语言没有 sizeof,因为 Java 认为 C 语言中的 sizeof 主要用于跨平台,而 Java 本身就是跨平台的。Java 中没有 unsigned,也就是说 Java 中的基本数据类型都是有符号的。 Java 关键字和运算符 Java 中有多种...

    Eclipse使用SizeOf.jar工具监测内存占用

    首先,你需要从官方网站下载SizeOf.jar文件并将其解压到一个合适的目录中。例如,本例中的解压路径为: ``` E:\apache-maven-3.0.3\.m2\repository\net\sourceforge\sizeof\0.2\SizeOf.jar ``` ### 步骤2:配置...

    java试卷2及答案

    知识点:Java 中的 InputStream 类中没有 flush() 方法。 19. 有关线程的描述:用 start() 方法可以使一个线程成为可运行的,但是它不一定立即开始运行。 知识点:Java 中的线程的 start() 方法可以使一个线程成为...

    sizeof4j:Java 的 sizeof

    大小为4j 用于测量 Java 对象内存大小的 Java 库。 import com.arturmkrtchyan.sizeof4j.util.ConsoleUtil ; import static java.lang.System.out ; class Main { public static void main ( String [] args ) {...

    Thinking in java4(中文高清版)-java的'圣经'

    + 和 += 3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.15.1 截尾和舍入 3.15.2提升 3.16 Java没有“sizeof” 3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-...

    java1java1.doc

    9. **Java保留字**:`sizeof`不是Java的保留字,Java中没有类似C/C++的`sizeof`运算符。 10. **GridLayout容器**:`GridLayout`布局管理器可以将组件按网格布局,所有单元格大小相同。若要在特定区域放置多个组件,...

    java-sizeof:ScalaJava 的内存消耗估算器

    这是 Scala/Java 的内存消耗估算器。... &lt;artifactId&gt;java-sizeof_2.11 &lt;version&gt;0.1 用法 对于任何对象,通过调用估计对象大小 SizeEstimator.estimate(obj); 有关更多示例,请查看示例文件夹。

    JAVA面向对象程序设计(期末考试试题及答案).pdf

    8. `sizeof`不是Java的关键字,它是C/C++中的一个运算符,Java中没有类似的概念。 9. 要捕获复选框的选择,需要实现`ItemListener`接口。 10. 子类不能直接继承父类的私有属性,但可以通过公共方法间接访问。 二...

Global site tag (gtag.js) - Google Analytics