java方法消耗内存统计

问题描述

大家好,有个问题请教一下各位:1、java代码,生成一百万条数据消耗100m内存,为什么生成数据结构是一样的50万条数据消耗的内存的65m,理论上不是应该减半吗,即消耗50m内存,不应该有这么大偏差吧;如果存在偏差,偏差在哪里?2、对上述生成的一百万数据进行排序,排序消耗内存大概是4-5M,这个消耗是不是小了点?3、有什么工具可以正确监控java方法执行时消耗多少内存?大家踊跃讨论噢,谢了,各位。

解决方案

1、jvisualvm 在运行过程中 进行堆转储2、jmap 打印堆3、垃圾回收执行的不可预测性,即何时执行是不确定的,所以数据可能不是很准确。
解决方案二:
安装JDK 在bin目录找到jconsole.exe,可以查看某java应用的消耗情况!
解决方案三:
用JDK自带的jconsole.exe或者是jvisualvm.exe监控应用程序的内存情况。这两个都在jdk的bin目录下。你说的这个情况有可能是垃圾回收自动执行了,由于你不知道什么时候垃圾回收自己就执行了,所以看到的数据会有偏差。

时间: 2024-10-30 01:13:17

java方法消耗内存统计的相关文章

C语言获取消耗内存的方法_C 语言

本文实例讲述了C语言获取消耗内存的方法.分享给大家供大家参考.具体实现方法如下: /* * 消耗内存 */ #include <stdio.h> #include <stdlib.h> main() { int MB=0; while(malloc(1<<20)) ++MB; printf("Alloced %d MB total\n",MB); } 希望本文所述对大家的C语言程序设计有所帮助. 以上是小编为您精心准备的的内容,在的博客.问答.公众号

检测codeigniter脚本消耗内存情况的方法_php实例

本文实例讲述了检测codeigniter脚本消耗内存情况的方法.分享给大家供大家参考.具体如下: 如果你想显示脚本消耗内存情况,请将下面的代码加入到view里面 <?php echo $this->benchmark- >memory_usage() ; ?> 相关的伪变量是: { memory_usage} 希望本文所述对大家基于codeigniter的php程序设计有所帮助. 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右

Java语言中内存管理的几个技巧

Java做的系统给人的印象是什么?占内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点. 其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么N多理由来证明它确实占内存呢?两个字,陋习. (1)别用new Boolean(). 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装boolean类型的,比如: ps.s

JAVA中的内存溢出

一.概述 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码. 更严重的是内存溢出与数据库锁表在系统开发和单元测试阶段并不容易被发现,当系统正式上线一般时间后,操作的并发量上来了,数据也积累了一些,系统就

Java虚拟机JVM内存分区及代码执行机制

1.  JVM体系结构   图1 JVM体系结构        方法区:存放JVM加载的类型信息.包括: 类型基本信息,常量池,字段信息,方法信息,类变量,指向ClassLoader的引用,Class类的引用,方法表等. (对应JVM内存配置中的-PermSize等)    java堆:程序中创建的类的实例和数组,包括class对象和exception对象,存放在堆里面.堆中除了存储对象的实例数据外,还要存储该对象指向方法区中类型信息的指针. (JVM中所有的线程共享堆空间,对应JVM内存配置中

Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏(超详细版)_java

Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收.最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量. 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以

详解Java语言中内存泄漏及如何检测问题

Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存.因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题.其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同. 随着越来越多的服务器程序采用Java技术,例如JSP,Servlet, EJB等,服务器程序往往长期运行.另外,在很多嵌入式系统中,内存的总量非常有限.内存泄露问题也

Java系统中内存泄漏测试方法的研究

摘 要 稳定性是衡量软件系统质量的重要指标,内存泄漏是破坏系统稳定性的重要因素.由于采用垃圾回收机制,Java语言的内存泄漏的模式与C++等语言相比有很大的不同.全文通过与C++中的内存泄漏问题进行对比,讲述了Java内存泄漏的基本原理,以及如何借助Optimizeit profiler工具来测试内存泄漏和分析内存泄漏的原因,在实践中证明这是一套行之有效的方法. 关键词 Java; 内存泄漏; GC(垃圾收集器) 引用; Optimizeit 问题的提出 笔者曾经参与开发的网管系统,系统规模庞大

Java虚拟机的内存结构

我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类.另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收.如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,