「java测试内存」java测试内存溢出

博主:adminadmin 2023-03-21 15:54:10 610

本篇文章给大家谈谈java测试内存,以及java测试内存溢出对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

北大青鸟java培训:java内存诊断软件?

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

Java堆:分析诊断数据堆转储分析堆转储可以使用如下的工具进行分析:EclipseMAT(内存分析工具,MemoryAnalyzerTool)是一个社区开发的分析堆转储的工具。

它提供了一些很棒的特性,包括:可疑的泄漏点:它能探测堆转储中可疑的泄露点,报告持续占有大量内存的对象;直方图:列出每个类的对象数量、浅大小(shallow)以及这些对象所持有的堆。

直方图中的对象可以很容易地使用正则表达式进行排序和过滤。

这样有助于放大并集中我们怀疑存在泄露的对象。

它还能够对比两个堆转储的直方图,展示每个类在实例数量方面的差异。

这样能够帮助我们查找Java堆中增长快的对象,并进一步探查确定在堆中持有这些对象的根;不可达的对象:MAT有一个非常棒的功能,那就是它允许在它的工作集对象中包含或排除不可达/死对象。

如果你不想查看不可达的对象,也就是那些会在下一次GC周期中收集掉的对象,只关心可达的对象,那么这个特性是非常便利的;重复的类:展现由多个类加载器所加载的重复的类;到GC根的路径:能够展示到GC根(JVM本身保持存活的对象)的引用链,这些GC根负责持有堆中的对象;OQL:我们可以使用对象查询语言(ObjectQueryLanguage)来探查堆转储中的对象。

它丰富了OQL的基础设施,能够编写复杂的查询,帮助我们深入了解转储的内部。

JavaVisualVM:监控、分析和排查Java语言的一站式工具。

它可以作为JDK工具的一部分来使用,也可以从GitHub上下载。

它所提供的特性之一就是堆转储分析。

它能够为正在监控的应用创建堆转储,也可以加载和解析它们。

从堆转储中,它可以展现类的直方图、类的实例,也能查找特定实例的GC根;jhat命令工具(在/bin文件夹中)提供了堆转储分析的功能,它能够在任意的浏览器中展现堆转储中的对象。

默认情况下,Web服务器会在7000端口启动。

jhat支持范围广泛的预定义查询和对象查询语言,以便于探查堆转储中的对象;Java任务控制(JavaMissionControl)的JOverflow插件:这是一个实验性的插件,能够让Java任务控制执行简单的堆转储分析并报告哪里可能存在内存浪费;Yourkit是一个商业的Javaprofiler,它有一个堆转储分析器,具备其他工具所提供的几乎所有特性。

除此之外,YourKit还提供了:可达性的范围(reachabilityscope):它不仅能够列出可达和不可达的对象,还能按照它们的可达性范围显示它们的分布,也就是,强可达、弱/软可达或不可达;内存探查:YourKit内置了一组全面的查询,而不是使用ad-hoc查询功能,YourKit的查询能够探查内存,查找反模式并为常见的内存问题分析产生原因和提供解决方案。

用Java怎么测试一个对象所占的内存的大小?

这是一个测试的方法,参考网上的,具体可以看提供给你的网址

package com;

public class Sizeof {

public static void main(String[] args) throws Exception {

// Warm up all classes/methods we will use

runGC();

usedMemory();

// Array to keep strong references to allocated objects

final int count = 100000;

Object[] objects = new Object[count];

long heap1 = 0;

// Allocate count+1 objects, discard the first one

for (int i = -1; i count; ++i) {

Object object = null;

// Instantiate your data here and assign it to object

object = new Object();

// object = new Integer (i);

// object = new Long (i);

// object = new String ();

// object = new byte [128][1]

if (i = 0)

objects[i] = object;

else {

object = null; // Discard the warm up object

runGC();

heap1 = usedMemory(); // Take a before heap snapshot

}

}

runGC();

long heap2 = usedMemory(); // Take an after heap snapshot:

final int size = Math.round(((float) (heap2 - heap1)) / count);

System.out.println("'before' heap: " + heap1 + ", 'after' heap: "

+ heap2);

System.out.println("heap delta: " + (heap2 - heap1) + ", {"

+ objects[0].getClass() + "} size = " + size + " bytes");

for (int i = 0; i count; ++i)

objects[i] = null;

objects = null;

}

private static void runGC() throws Exception {

// It helps to call Runtime.gc()

// using several method calls:

for (int r = 0; r 4; ++r)

_runGC();

}

private static void _runGC() throws Exception {

long usedMem1 = usedMemory(), usedMem2 = Long.MAX_VALUE;

for (int i = 0; (usedMem1 usedMem2) (i 500); ++i) {

s_runtime.runFinalization();

s_runtime.gc();

Thread.currentThread().yield();

usedMem2 = usedMem1;

usedMem1 = usedMemory();

}

}

private static long usedMemory() {

return s_runtime.totalMemory() - s_runtime.freeMemory();

}

private static final Runtime s_runtime = Runtime.getRuntime();

}

请问怎么测试一个java程序占用的内存和cpu消耗?

只能查看JAVA 虚拟机占用的内存Runtime.getRuntime().maxMemory() 返回 Java 虚拟机试图使用的最大内存量。Runtime.getRuntime().freeMemory() 返回 Java 虚拟机中的空闲内存量。Runtime.getRuntime().totalMemory() 返回 Java 虚拟机中的内存总量。

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

你可以先用内存监控工具,进行监控,看看这个功能到底用多少内存。如果不多,其实都不需要实现你说的代码监控的。如果你要使用代码监控,你可是使用Runtime类的几个属性,MaxMemory、FreeMemory、TotalMemory。然后实现个线程,在下载pdf功能前开启线程,然后完毕时关闭线程,如果内存即将溢出(设定个阈值,比如说15%),就报错,跳转到错误页面。

java程序怎么测量 所使用的内存大小 ,

Runtime.maxMemory(); //最大JVM内存(就是你配置给JVM的值)

Runtime.totalMemory();//JVM可支配的最大内存值

Runtime.freeMemory();//剩余内存空间

另外给一个例子:

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大内存 = " + max);

System.out.println("已分配内存 = " + total);

System.out.println("已分配内存中的剩余空间 = " + free);

System.out.println("最大可用内存 = " + usable);

程序使用:java.lang.Runtime 包,不需要特别下载和导入

怎么测试一个java程序占用的内存和cpu消耗

只能查看JAVA 虚拟机占用的内存Runtime.getRuntime().maxMemory() 返回 Java 虚拟机试图使用的最大内存量。Runtime.getRuntime().freeMemory() 返回 Java 虚拟机中的空闲内存量。Runtime.getRuntime().totalMemory() 返回 Java 虚拟机中的内存总量。

java测试内存的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java测试内存溢出、java测试内存的信息别忘了在本站进行查找喔。