[转载]查看虚拟机内存

留个记录,顺便说一下转载背景:在做excel导入时,10万条输入写入2个sheet时,报虚拟机异常

 

java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
 at jxl.write.biff.File.write(File.java:148)
 at jxl.write.biff.RowRecord.writeCells(RowRecord.java:297)
 at jxl.write.biff.SheetWriter.write(SheetWriter.java:440)
 at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1257)
 at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:839)

这个是导入excel的数据的格式。(90600条测试通过)。

 

所以需要增大本地虚拟机内存了,下面是2中转载的查看和增加虚拟机内存的方式。

 

[转载1]http://www.iteye.com/problems/54114

 java.lang.Runtime类提供了查看当前JVM内存的使用情况。每个java实例(即虚拟机实例)只有一个Runtime的实例,通过Runtime.getRuntime()可以得到当前虚拟机中的Runtime实例对象。

Runtime提供3个方法可以获取当前JVM最大可以使用内存、当前JVM已拥有最大内存和剩余未使用内存。这3个内存指的都是JVM堆内存。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();



首先在JAVA的启动参数中加入指定-Xmx100m,设置JVM堆最大可以使用100m的内存。

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



上面代码的输出结果如下(这些内存大小与运行环境相关)

最大内存 = 104071168
已分配内存 = 5177344
已分配内存中的剩余空间 = 4937280
最大可用内存 = 103831104



最大内存(maxMemory)是通过启动JAVA虚拟机时使用参数-Xmx100m指定的,而输出也确实是100m。这表示JVM的堆内存最大可以使用104071168字节。

已分配内存(totalMemory)jvm使用的内存都是从本地系统获取的,但是通常jvm刚启动的时候,并不会向系统申请全部的内存。而是根据所加载的Class和相关资源的容量来决定的。在本例中,由于只在一个main()主方法中执行了上面的几行简单的代码。所以JVM只申请了5177344字节的内存。

已分配内存中的剩余空间(freeMemory) 这是相对以分配内存(totalMemeory)计算的,相当于totalMemory - 已使用内存。当freeMemory 快要接近0时,以分配的内存即将耗尽,JVM会决定再次向系统申请更多的内存。

最大可用内存 (usable)这是JVM真正还可以再继续使用的内存(不考虑之后垃圾回收再次得到的内存)。由【最大内存 - 已分配内存 + 已分配内存中的剩余空间】计算得到。

[转载2]http://fys249931556.blog.163.com/blog/static/1227223462009622105352765/

可以用代码查看,也可以在eclipse中增添相关信息后直接查看。

1. 用下面的代码进行JVM的内存查看

memory.java


import java.lang.Runtime;

public class memory {
public static void main(String args[]) {
System.out.println("usage:");
memory m=new memory();
long t=m.showUsage();
System.out.println("Total:"+ t + " Bytes");
long fr=m.freeMemory();
//System.gc();
System.out.println("Free:"+fr + " Bytes");
long rem=t-fr;
System.out.println("Occupied Space :"+rem + " Bytes");
}


public long showUsage() {
long l=Runtime.getRuntime().totalMemory();
return(l);
}


public long freeMemory() {
long f=Runtime.getRuntime().freeMemory();
return(f);
}
}

2. 在Eclipse中查看JVM内存

a.在eclipse根目录下建立一个文件,文件名options,不要加后缀直接保存,文件内容org.eclipse.ui/perf/showHeapStatus=true
b.修改eclipse目录下的eclipse.ini文件,在文件起始部分添加如下内容:
-debug
options
-vm
javaw.exe
重新启动eclipse,就可以看到下方状态条多了JVM的信息


3、改变JVM内存大小的方法
java -Xms100m -Xmx250 memory

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值