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());   
     }   
    
 } 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值