网站首页 > 文章中心 > 其它

java分析代码内存

作者:小编 更新时间:2023-09-28 14:02:54 浏览量:57人看过

请帮我分析一下这个java程序的内存,最好是图解

对于Java程序来说,内存大体上是分两个部分的.堆和栈.堆放对象和字符串,因为String也是一个类.栈放基本的数据类型,例如int,short,float等等.还有第三个部分是从栈里面分出来的,叫静态堆栈区(好像是这个名),是放用static定义的变量的.

首先从主方法开始,内存开辟了一个堆区,这个堆里面放的是Test对象的实例,然后又开辟了一个栈区,栈里面放的是Test对象的引用t,这个t就是指向了堆里面的Test对象.堆里面的Test实例有三个方法,今天这一节我更愿意用重载来解释这三个方法的关系,这样更准确,因为多态的概念太大了,这里确实也有多态的特性,但是多态用于解释接口和实现类之间的关系应该更好吧.回归正题,这三个方法被放在了堆里面,但是这三个方法都有参数,这些参数就是局部变量,是放在栈里的.每次调用一个方法时,程序给这些参数创建几个临时变量,一旦方法调用完毕这些变量就会被销毁.对于定义在主方法中的变量,是在主方法调用完毕后销毁的.另外,由于t存放在栈中,t指向的Test对象是存放在堆中的,所以主方法调用完毕先会销毁t,然后垃圾回收器发现没有变量指向Test对象了,就会在栈中把Test销毁.

建议楼主看一下马士兵的java基础视频教程,前面讲内存讲的很详细.

如何看一段JAVA代码耗了多少内存

使用java自带的性能分析工具jvisualvm , 可以方便的查看内存, 对象, 线程等多种信息.

java分析代码内存-图1

win+R?然后输入?jvisualvm?回车即可

效果如下图

java内存诊断软件?

对于每一个java进程来说都有自己的内存池和使用空间,而这也就意味着会出现内存使用错误等问题,而这时候我们就需要对java内存进行诊断分析,今天云南java培训就一起来了就一下,在进行内存诊断上都有哪些软件可以使用.

Java堆:分析诊断数据

java分析代码内存-图2

堆转储分析

堆转储可以使用如下的工具进行分析:

EclipseMAT(内存分析工具,MemoryAnalyzerTool)是一个社区开发的分析堆转储的工具.它提供了一些很棒的特性,包括:

可疑的泄漏点:它能探测堆转储中可疑的泄露点,报告持续占有大量内存的对象;

直方图:列出每个类的对象数量、浅大小(shallow)以及这些对象所持有的堆.直方图中的对象可以很容易地使用正则表达式进行排序和过滤.这样有助于放大并集中我们怀疑存在泄露的对象.它还能够对比两个堆转储的直方图,展示每个类在实例数量方面的差异.这样能够帮助我们查找Java堆中增长快的对象,并进一步探查确定在堆中持有这些对象的根;

不可达的对象:MAT有一个非常棒的功能,那就是它允许在它的工作集对象中包含或排除不可达/死对象.如果你不想查看不可达的对象,也就是那些会在下一次GC周期中收集掉的对象,只关心可达的对象,那么这个特性是非常便利的;

重复的类:展现由多个类加载器所加载的重复的类;

到GC根的路径:能够展示到GC根(JVM本身保持存活的对象)的引用链,这些GC根负责持有堆中的对象;

OQL:我们可以使用对象查询语言(ObjectQueryLanguage)来探查堆转储中的对象.它丰富了OQL的基础设施,能够编写复杂的查询,帮助我们深入了解转储的内部.

Java任务控制(JavaMissionControl)的JOverflow插件:这是一个实验性的插件,能够让Java任务控制执行简单的堆转储分析并报告哪里可能存在内存浪费;

Yourkit是一个商业的Javaprofiler,它有一个堆转储分析器,具备其他工具所提供的几乎所有特性.除此之外,YourKit还提供了:

可达性的范围(reachabilityscope):它不仅能够列出可达和不可达的对象,还能按照它们的可达性范围显示它们的分布,也就是,强可达、弱/软可达或不可达;

内存探查:YourKit内置了一组全面的查询,而不是使用ad-hoc查询功能,YourKit的查询能够探查内存,查找反模式并为常见的内存问题分析产生原因和提供解决方案.

如何分析java的内存占用情况

hi:

虚拟机的内存情况查看,使用Runtime类进行.如下:

//虚拟机内存使用量查询

class RamRun implements Runnable{

private Runtime runtime;

public void run(){

try{

java分析代码内存-图3

runtime=Runtime.getRuntime();

System.out.println("处理器的数目"+runtime.availableProcessors());

}catch(Exception e){

e.printStackTrace();

}

请问用Java代码,怎样测试一段程序占用了多少内存?

以上就是土嘎嘎小编为大家整理的java分析代码内存相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章