java 关于内存溢出的相关知识
?
?
http://developer.51cto.com/art/200906/129346.htm
Java内存溢出的详细解决方案
?
本文介绍了java内存溢出的时候可以通过设置各种参数来解决的方案。
包括:java.lang.OutOfMemoryError: PermGen space
与:java.lang.OutOfMemoryError: Java heap space
并介绍了解决方案中各个参数的意义。如:-XX:PermSize? -Xmx
也介绍了一些入门的GC概念。
?
http://developer.51cto.com/art/200906/128944.htm
Java程序性能优化之找出内存溢出元凶
?
本文讲述了内存分析工具:JProbe 并给出了一些导致内存溢出的建议,
那就是不用的对象要设置为null,并保证没有map,list等其他对象保存其引用
?
http://tech.ifeng.com/internet/detail_2011_03/08/5022006_0.shtml
Java内存查看与分析
?
本文讲述了java gc的区域划分,使用java自带的工具进行内存使用情况分析。
提到了jconsole、jmap、jhat、jstat等工具,并深入讲述了eden,susvivor0,susvivor1
?
java.lang.OutOfMemoryError: Java heap space 的解决方法这篇文章提到了关于java 内存使用情况查看的方法:
?
package longne; import java.lang.management.CompilationMXBean; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryPoolMXBean; import java.lang.management.RuntimeMXBean; import java.lang.management.ThreadMXBean; import java.util.List; import sun.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; /** * java获取所在操作系统的信息,JVM的相关信息 * @author kongqz * */ public class MyJvm { // =======================通过java来获取相关系统状态============================ // 总的内存量 i is 32576 // 空闲内存量 j is 32357 // 最大内存量 is 812928 /** * @param 直接通过jdk来获取系统相关状态,在1.5.0_10-b03版本以上测试通过 */ public static void main(String[] args) { System.out.println("=======================通过java来获取相关系统状态============================ "); int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位 System.out.println("总的内存量 i is "+i); int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量 System.out.println("空闲内存量 j is "+j); System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024); System.out.println("=======================OperatingSystemMXBean============================ "); OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); System.out.println(osm.getFreeSwapSpaceSize()/1024); System.out.println(osm.getFreePhysicalMemorySize()/1024); System.out.println(osm.getTotalPhysicalMemorySize()/1024); //获取操作系统相关信息 System.out.println("osm.getArch() "+osm.getArch()); System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors()); System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize()); System.out.println("osm.getName() "+osm.getName()); System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime()); System.out.println("osm.getVersion() "+osm.getVersion()); //获取整个虚拟机内存使用情况 System.out.println("=======================MemoryMXBean============================ "); MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean(); System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage()); System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage()); //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况 System.out.println("=======================ThreadMXBean============================ "); ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean(); System.out.println("getThreadCount "+tm.getThreadCount()); System.out.println("getPeakThreadCount "+tm.getPeakThreadCount()); System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime()); System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount()); System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime()); //当前编译器情况 System.out.println("=======================CompilationMXBean============================ "); CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean(); System.out.println("getName "+gm.getName()); System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime()); //获取多个内存池的使用情况 System.out.println("=======================MemoryPoolMXBean============================ "); List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans(); for(MemoryPoolMXBean mpm:mpmList){ System.out.println("getUsage "+mpm.getUsage()); System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString()); } //获取GC的次数以及花费时间之类的信息 System.out.println("=======================MemoryPoolMXBean============================ "); List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans(); for(GarbageCollectorMXBean gcm:gcmList){ System.out.println("getName "+gcm.getName()); System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames()); } //获取运行时信息 System.out.println("=======================RuntimeMXBean============================ "); RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean(); System.out.println("getClassPath "+rmb.getClassPath()); System.out.println("getLibraryPath "+rmb.getLibraryPath()); System.out.println("getVmVersion "+rmb.getVmVersion()); } }
?
?
?
?