`

java 代码时间和内存测试

    博客分类:
  • java
阅读更多
// 测试用了多少内存
import java.util.ArrayList;
import java.util.List;

public class MemoryTest {
	public static long used() {
		long total = Runtime.getRuntime().totalMemory();
		long free = Runtime.getRuntime().freeMemory();
		return (total - free);
	}

	public static void main(String[] args) {
		long start = used();
        List<String> list = new ArrayList<String>();
        int total = 10000;
        while (total > 0) {
        	total--;
			list.add(new String());
		}
        long end = used();
        System.out.println("memory increased by "+(end-start)+"bytes");
	}
}


// 测试执行时间,这个大家都知道
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TimeTest {
    
	public static void main(String[] args) {
		List<String> arrayList = new ArrayList<String>();
		int total1 = 1000000;
		long start = System.currentTimeMillis();
		while (total1 > 0) {
			total1--;
			arrayList.add("testArrayList");
		}
		long end = System.currentTimeMillis();
		System.out.println("arrayList took " + (end - start) + " Millisecond");
		
		List<String> linkedList = new LinkedList<String>();
		int total2 = 1000000;
		long start2 = System.currentTimeMillis();
		while (total2 > 0) {
			total2--;
			linkedList.add("testLinkedList");
		}
		long end2 = System.currentTimeMillis();
		System.out.println("linkendList took " + (end2 - start2) + " Millisecond");
	}
}



// 运用aop计算程序执行时间
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TimeTest {
	public static void main(String[] args) {
		try {
			Foo foo = (Foo) Handler.newInstance(new FooImpl());
			foo.testArrayList();
			foo.testLinkedList();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

class Handler implements InvocationHandler {
	
    Object obj;
	
    private Handler(Object object) {
		this.obj = object;
	}
    
	public static Object newInstance(Object obj) {
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
				.getClass().getInterfaces(), new Handler(obj));
	}
    
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result;
		try {
			System.out.print("begin method :" + method.getName() + "(");
			for (int i = 0; args != null && i < args.length; i++) {
				if (i > 0) {
					System.out.print(",");
				}
				System.out.print(" " + args[i].toString());
			}
			System.out.println(" )");
			long start = System.currentTimeMillis();
			result = method.invoke(obj, args);
			long end = System.currentTimeMillis();
			System.out.println("the method " + method.getName() + " lasts "
					+ (end - start) + "ms");
		} catch (InvocationTargetException e) {
			throw e.getTargetException();
		} catch (Exception e) {
			throw new RuntimeException("unexpected invocation exception: "
					+ e.getMessage());
		} finally {
			System.out.println("end method :" + method.getName());
		}
		return result;
	}
}

interface Foo {
	public void testArrayList();

	public void testLinkedList();
}

class FooImpl implements Foo {
	private List link = new LinkedList();
	private List array = new ArrayList();

	public FooImpl() {
		for (int i = 0; i < 10000; i++) {
			array.add(new Integer(i));
			link.add(new Integer(i));
		}
	}

	public void testArrayList() {
		for (int i = 0; i < 10000; i++)
			array.get(i);
	}

	public void testLinkedList() {
		for (int i = 0; i < 10000; i++)
			link.get(i);
	}
}

分享到:
评论

相关推荐

    JAVA代码优化工具

    Java代码优化是提升应用程序性能的关键步骤,尤其是在大型企业级应用或者高性能服务中。优化能够减少内存消耗,提高程序运行速度,降低CPU使用率,并改善整体的用户体验。在Java开发领域,有多种工具可以帮助开发者...

    Java内存泄露检测

    Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...

    C++代码转java工具

    C++到Java的转换可能涉及Java Native Interface (JNI),这是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。 至于压缩包内的文件“C++ to Java Converter.exe”很可能就是这个转换工具的执行程序,...

    java内存泄露、溢出检查方法和工具

    本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 首先,理解内存泄露的概念至关重要。在Java中,内存泄露通常发生在对象不再被程序使用但仍然保持在内存中,...

    Java加载dll,导致Java进程内存泄露

    标签“源码”和“工具”表明可能需要深入到DLL的源代码中去寻找问题,或者使用一些工具来检测和定位内存泄露。例如,可以使用内存分析工具如Valgrind、LeakCanary等来帮助找到内存泄露的位置。 在提供的压缩包文件...

    java程序自我监视内存使用

    开发者可以编写代码来实现自定义的内存监视,例如使用`java.lang.Runtime`类获取系统的总内存和已使用内存,或者使用`java.lang.instrument.Instrumentation`接口在类加载时添加内存统计代码。另外,`java.lang....

    java内存机制及异常处理

    解决这些问题的方法包括但不限于调整JVM参数以增大内存分配、优化代码以减少内存占用、及时关闭不再使用的资源(如数据库连接)以及使用内存分析工具检测和修复内存泄漏。正确理解和运用Java内存机制以及异常处理...

    Java虚拟机内存测试和参数调优代码.zip

    本资源"Java虚拟机内存测试和参数调优代码.zip"显然是一个专注于Java开发者如何理解和优化JVM内存配置的实践教程。在Java应用开发中,理解和调优JVM内存设置至关重要,因为它直接影响程序性能、稳定性以及内存使用...

    java时间空间性能优化附带个人测试代码

    本篇将基于《java time and space performance tips》一书中的知识,结合提供的个人测试代码,深入探讨Java性能优化的策略。 1. **避免不必要的对象创建** - 在Java中,频繁的对象创建和垃圾回收会增加运行时的...

    java主要反射和内存机制

    Java内存管理还包括垃圾回收(Garbage Collection, GC)和内存泄漏检测等重要概念。GC自动回收不再使用的对象,以避免内存耗尽。Java提供了多种垃圾收集算法,如分代收集、标记-清除、复制算法等。内存泄漏是指程序...

    java内存分析-内存泄露问题.rar

    为了检测和解决内存泄露,我们可以使用一些工具进行内存分析,如VisualVM、JProfiler、MAT(Memory Analyzer Tool)等。这些工具能提供详细的内存分配、对象生命周期和引用链路信息,帮助我们定位问题。 分析内存...

    Java 内存调整技巧

    定期进行长时间运行和重复的测试是检测内存泄漏的有效方法,因为这些问题可能在高工作负载或长时间运行后才显现。 在进行内存调整时,关键步骤包括: 1. 分析应用程序的对象使用模式,确保对象在不再需要时被正确...

    java内存泄漏分析工具

    另外,VisualVM和JProfiler都支持远程连接,这意味着它们可以在生产环境中对运行的应用进行无侵入式的监控,这对于实时检测和预防内存泄漏尤为重要。 总结来说,Java内存泄漏的分析工具如JVisualVM、MAT、JProfiler...

    java代码质量控制

    总结来说,Java代码质量控制是一个综合的过程,涉及规范性、结构、效率和错误预防等多个方面。利用各种工具,结合人工审查,可以有效地提高代码质量,为软件项目的成功打下坚实基础。开发团队应重视并实践这些工具和...

    Allatori java 代码混淆

    Java代码混淆是一种安全措施,主要用于保护Java应用程序的源代码不被未经授权的人员逆向工程解析。Allatori就是一款专门用于Java代码混淆的工具,它能够将可读性强的Java字节码转换为难以理解的形式,以此增加逆向...

    测量Java应用程序的CPU和内存占用率

    Mikhalenko扩展了一个库,使其能够在Windows和Solaris 8平台上测量CPU使用时间、CPU使用百分比、系统内存状态(包括剩余和已使用内存)以及Java进程的本机内存大小。库的核心是三个部分:通用的Java代码,Windows...

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

    这篇研究主要探讨了如何检测和分析Java应用中的内存泄漏问题。以下是对这个主题的详细阐述: 一、内存泄漏的理解 内存泄漏是指程序在申请内存后,无法释放已经不再使用的内存空间,一次小的内存泄漏可能不明显,但...

    如何解决Java内存泄漏

    通过深入了解Java的内存管理机制,并借助于专业的工具如OptimizeIt,可以有效地检测和解决内存泄漏问题。此外,开发者还需要遵循良好的编程实践,比如合理使用静态变量、正确管理资源的生命周期等,从而避免内存泄漏...

    java代码性能问题检查计划及方案

    Java代码性能问题检查计划及方案 在Java编程中,性能问题往往是开发者关注的重点。虽然Java语言自身具有高效、跨平台的特性,但程序的运行效率却更多地取决于开发者的设计和编码习惯。本方案旨在提供一个详细的检查...

Global site tag (gtag.js) - Google Analytics