`
deyimsf
  • 浏览: 68316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中获取对象实例的大小

    博客分类:
  • JVM
阅读更多
  获取程序中对象的大小:

有jar文件SizeOfObjetct.jar,内容如下:
      SizeOfObject.java类
      META-INF/MANIFEST.MF文件

   SizeOfObject.java类
package com.masf;
import java.lang.instrument.Instrumentation;
/**
 * 这是一个代理类
 * @author 
 *
 */
public class SizeOfObject {
	 static Instrumentation inst;
	 //JVM负责调用该方法,并传递参数
	 public static void premain(String agentArgs, Instrumentation insta){
		 inst = insta;
	 }
	 
	 public static void premain(String agentArgs){
		 
	 }
	 
}


    META-INF/MANIFEST.MF文件内容
Premain-Class: com.masf.SizeOfObject


计算对象大小:
在启动jvm的时候需要为vm传递一个参数:-javaagent:C:\temp\SizeOfObject.jar,
这样在 JVM初始化后,每个 premain 方法将按照指定代理的顺序调用,首先调用public static void premain(String agentArgs, Instrumentation insta);如果该方法不存在则调用public static void premain(String agentArgs);
  当我们获得Instrumentation 实例后,就可以调用它的getObjectSize()方法获取对象的大小。
package com.masf;
import java.lang.instrument.Instrumentation;
/**
 * 计算对象大小
 * @author
 *
 */
public class JVM {
	
		public static void main(String[] args){
			Instrumentation inst = SizeOfObject.inst;
			
			byte[] array = new byte[1024*1024];
			System.out.println(inst.getObjectSize(array));
		}
}



输出值:1048592
注意:不同的jvm实例输出的值可能不一样
分享到:
评论

相关推荐

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

    但是,Java API本身并不提供直接获取对象大小的方法。为了计算对象大小,我们需要借助一些第三方库或者自行实现。 一个常见的第三方库是`DeepSizeOf`,它来自Eclipse Collections框架,提供了类似于C++中的`sizeof`...

    计算java对象大小

    在Java中,对象的大小通常可以通过以下几种方式来计算: 1. **使用Java API**:Java 9及以上版本引入了一个名为`sun.misc.Unsafe`的API,虽然它不是公开的,但可以通过反射访问。`Unsafe`类提供了一个`...

    计算一个Java对象占用字节数的方法

    对象头包含了对象的元数据,如对象实例的名字、唯一标识(对象ID)以及对象的状态信息,如是否可达(是否被垃圾收集器标记为可回收)。在Hotspot JVM中,非数组对象的对象头占用8字节,而数组对象则额外增加4字节来...

    JAVA对象所占内存大小计算例子

    这里的`unsafe.objectFieldOffset`方法用于获取对象头的大小,`unsafe.objectSize`方法则用于获取实例数据的大小。注意,这些方法的使用需要JDK的非公开API,因此在生产环境中可能会受限。 此外,`...

    java 对象 内存 大小

    当我们谈论“Java对象内存大小”时,我们通常指的是一个Java对象在内存中占据的空间,包括对象头、实例字段以及可能的对齐填充。这个知识点对于开发高效缓存系统尤其重要,因为缓存需要精确管理内存来最大化存储效率...

    测量Java对象大小的demo

    这个接口提供了诸如`getObjectSize()`方法,可以用来获取对象在内存中的大小,包括对象头、实例变量以及对其他对象的引用。 为了实现这个功能,我们需要编写一个`javaagent`,通常包含一个`premain`方法,该方法会...

    统计缓存(java对象所占的内存)大小

    - Java的`java.lang.instrument.Instrumentation`接口提供了获取对象大小的方法。通过代理类或者预加载器(如JDK动态代理或ByteBuddy),可以在运行时获取对象大小。 4. **Memory Profiler**:如YourKit、Eclipse ...

    java源码包---java 源码 大量 实例

    Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,...

    测试java对象占用内存大小的例子

    在Java中,由于垃圾回收机制的存在,直接获取对象的内存占用并不像C++等语言那样简单。通常,我们可以使用一些工具或API来帮助我们。例如,`sun.misc.Unsafe`类(虽然非标准,但广泛使用)提供了访问内存的能力,...

    Java 面向对象 练习题与答案

    Font 类是 Java 中的一个类,用于设置程序中的字体实例对象。 Font 类有三个参数:face、style、size,分别指字体的外观、样式和大小。我们可以使用 Font 类的静态方法 getFont() 创建 Font 对象,例如:Font font =...

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

    这个工具提供了查看对象实例大小的能力,这对于调试和性能优化非常有用。"java-sizeof-0.0.4"包含三个不同类型的JAR文件: 1. `java-sizeof-0.0.4-javadoc.jar`:这是Java文档的归档,包含了关于工具的API和方法的...

    Java 实例 - 获取远程文件大小源代码+详细指导教程.zip

    首先,我们需要了解Java中的`java.net.URL`类,它是处理URL的基础。这个类提供了打开到指定URL的连接的方法,以及获取有关URL的信息。在获取远程文件大小时,我们通常会发送一个HTTP HEAD请求,因为这种请求只需要...

    java连接池实例.doc

    ### Java连接池实例知识点解析 #### 一、Java连接池概念 在Java应用程序中,数据库连接是宝贵的资源。每一个数据库连接都需要消耗系统资源,并且频繁地创建和销毁连接会导致性能下降。因此,为了提高应用程序的效率...

    java 图像编程实例库

    本资源包“Java图像编程实例库”提供了一系列的示例代码,旨在帮助开发者理解和应用Java中的图像处理技术。以下将详细介绍其中可能涵盖的知识点。 1. **Java AWT 和 Swing**: 这两个是Java GUI的主要框架,提供了...

    java获取各进程的信息

    本示例展示了如何使用Sigar库来获取系统中各个进程的关键信息,包括PID、用户、启动时间、大小、所占内存、状态、运行时间、CPU使用率及命令等。这对于系统监控和故障排查具有重要意义。通过定时更新数据,可以实时...

    Java 实例 - 获取文件大小源代码-详细教程.zip

    这个详细教程将引导你通过源代码理解如何在Java中获取文件大小。下面,我们将深入探讨这一主题,分析相关知识点并提供实践示例。 首先,Java中的`java.io.File`类提供了许多与文件操作相关的功能,包括获取文件大小...

    Java 实例 - 获取目录大小源代码-详细教程.zip

    这个"Java实例 - 获取目录大小源代码-详细教程.zip"压缩包文件包含了一个具体的Java示例,旨在教会开发者如何计算一个目录及其所有子目录下的文件总大小。以下是对这个教程的详细解释: 首先,我们需要理解目录大小...

    JAVA 实例 JAVA 实例

    - 变量:Java中的变量用于存储数据,有基本类型(如int、float、boolean)和引用类型(如类、接口、数组)。 - 类型转换:在不同数据类型之间进行转换时,需要进行类型转换,包括自动类型提升和强制类型转换。 - ...

    java图像处理实例

    使用`ImageIO.read()`方法可以从文件或输入流中读取图像,将其转换为`BufferedImage`对象。例如: ```java File imageFile = new File("image.jpg"); BufferedImage image = ImageIO.read(imageFile); ``` 3. ...

    Java多线程编程实例

    首先,我们要理解Java中的线程是如何创建的。Java提供了两种主要的线程创建方式:继承Thread类和实现Runnable接口。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要将run()方法定义在另一个类中,并...

Global site tag (gtag.js) - Google Analytics