// 测试用了多少内存
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代码优化是提升应用程序性能的关键步骤,尤其是在大型企业级应用或者高性能服务中。优化能够减少内存消耗,提高程序运行速度,降低CPU使用率,并改善整体的用户体验。在Java开发领域,有多种工具可以帮助开发者...
Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...
C++到Java的转换可能涉及Java Native Interface (JNI),这是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。 至于压缩包内的文件“C++ to Java Converter.exe”很可能就是这个转换工具的执行程序,...
本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 首先,理解内存泄露的概念至关重要。在Java中,内存泄露通常发生在对象不再被程序使用但仍然保持在内存中,...
标签“源码”和“工具”表明可能需要深入到DLL的源代码中去寻找问题,或者使用一些工具来检测和定位内存泄露。例如,可以使用内存分析工具如Valgrind、LeakCanary等来帮助找到内存泄露的位置。 在提供的压缩包文件...
开发者可以编写代码来实现自定义的内存监视,例如使用`java.lang.Runtime`类获取系统的总内存和已使用内存,或者使用`java.lang.instrument.Instrumentation`接口在类加载时添加内存统计代码。另外,`java.lang....
解决这些问题的方法包括但不限于调整JVM参数以增大内存分配、优化代码以减少内存占用、及时关闭不再使用的资源(如数据库连接)以及使用内存分析工具检测和修复内存泄漏。正确理解和运用Java内存机制以及异常处理...
本资源"Java虚拟机内存测试和参数调优代码.zip"显然是一个专注于Java开发者如何理解和优化JVM内存配置的实践教程。在Java应用开发中,理解和调优JVM内存设置至关重要,因为它直接影响程序性能、稳定性以及内存使用...
本篇将基于《java time and space performance tips》一书中的知识,结合提供的个人测试代码,深入探讨Java性能优化的策略。 1. **避免不必要的对象创建** - 在Java中,频繁的对象创建和垃圾回收会增加运行时的...
Java内存管理还包括垃圾回收(Garbage Collection, GC)和内存泄漏检测等重要概念。GC自动回收不再使用的对象,以避免内存耗尽。Java提供了多种垃圾收集算法,如分代收集、标记-清除、复制算法等。内存泄漏是指程序...
为了检测和解决内存泄露,我们可以使用一些工具进行内存分析,如VisualVM、JProfiler、MAT(Memory Analyzer Tool)等。这些工具能提供详细的内存分配、对象生命周期和引用链路信息,帮助我们定位问题。 分析内存...
定期进行长时间运行和重复的测试是检测内存泄漏的有效方法,因为这些问题可能在高工作负载或长时间运行后才显现。 在进行内存调整时,关键步骤包括: 1. 分析应用程序的对象使用模式,确保对象在不再需要时被正确...
另外,VisualVM和JProfiler都支持远程连接,这意味着它们可以在生产环境中对运行的应用进行无侵入式的监控,这对于实时检测和预防内存泄漏尤为重要。 总结来说,Java内存泄漏的分析工具如JVisualVM、MAT、JProfiler...
总结来说,Java代码质量控制是一个综合的过程,涉及规范性、结构、效率和错误预防等多个方面。利用各种工具,结合人工审查,可以有效地提高代码质量,为软件项目的成功打下坚实基础。开发团队应重视并实践这些工具和...
Java代码混淆是一种安全措施,主要用于保护Java应用程序的源代码不被未经授权的人员逆向工程解析。Allatori就是一款专门用于Java代码混淆的工具,它能够将可读性强的Java字节码转换为难以理解的形式,以此增加逆向...
Mikhalenko扩展了一个库,使其能够在Windows和Solaris 8平台上测量CPU使用时间、CPU使用百分比、系统内存状态(包括剩余和已使用内存)以及Java进程的本机内存大小。库的核心是三个部分:通用的Java代码,Windows...
这篇研究主要探讨了如何检测和分析Java应用中的内存泄漏问题。以下是对这个主题的详细阐述: 一、内存泄漏的理解 内存泄漏是指程序在申请内存后,无法释放已经不再使用的内存空间,一次小的内存泄漏可能不明显,但...
通过深入了解Java的内存管理机制,并借助于专业的工具如OptimizeIt,可以有效地检测和解决内存泄漏问题。此外,开发者还需要遵循良好的编程实践,比如合理使用静态变量、正确管理资源的生命周期等,从而避免内存泄漏...
Java代码性能问题检查计划及方案 在Java编程中,性能问题往往是开发者关注的重点。虽然Java语言自身具有高效、跨平台的特性,但程序的运行效率却更多地取决于开发者的设计和编码习惯。本方案旨在提供一个详细的检查...