关于java内存

 

Eclipse也是在JVM上运行的,所以修改eclipse.ini文件中的配置,只是修改了运行eclipse IDE的这个JVM的运行参数。

也就是说,如果修改eclipse.ini

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

-vmargs

-Xms40m

-Xmx256m

表示:启动JVM运行eclipse时,设置最大perm size256M,堆最小为40M,最多分配256M。一般情况下,这个配置运行这个eclipse IDE是足够了。在运行程序时,控制台上打印的OutOfMemoryErrorheap基本上和这个无关。

 

 

程序时的内存溢出应该修改程序运行时的JVM运行参数。Eclipse中,修改方式为:Run -> Open Run Dialog,选项卡Arguments中,VM arguments中添加-Xms256m   -Xmx1024m,表示运行程序时,最小堆内存需要分配256M,最多需要分配1024M。如果你的内存空间无限大,你可以把这两个值写得无限大,然后就永远不会出现内存用完的错误了。

 

但是如果你愿意,还是可以把编程看成一门艺术的。怎么有效的利用内存空间?怎么在时间和空间之间权衡取舍?所以多了解一些java内存管理相关的一些内容总是不坏。

 

1.         对象创建的方式是否经济?是否可以用缓存、缓冲区来避免重复的、大量的对象创建?Lucene3.0中用attribute替换了Token,就是一个很好的样例。但是,得处理好多线程中临界区的同步互斥。

2.         是否有对象的间接引用没有清除?例如,是否清除了所有在Collection中的对象引用?往往由于粗心,会在这里不小心犯错。

 


 

查看java内存使用细节的工具很多。JDK自带的工具中,就有很多很好用的。网上有介绍文章《jstat,jmap,jconsole,jvisualvm,jps,jinfoJDK系统监控、性能调优工具》(http://zior.org/archives/299.html

 

以下记录记录我使用各个工具的小小收获。

Jconsole 

 

 

是多文档的一个窗口,可查看程序运行时的不同方面的统计数据。比较强大。


 

命令行工具

具体深入细节有一些命令行工具。这些命令行工具和javacjava同目录,配置好path就可以使用。工具的命令都很简单,使用很方便,但是功能实在太强大了!文档中提到,这些工具是试验性质的,不一定所有版本都有。。。

jps        列举jvm上运行的java线程

jmap    sun提供的文档:http://download.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

注意其中的DESCRIPTION:在windows中仅支持jmap -dump:<dump-options> pid(以二进制格式输出堆内存信息到文件中)和jmap -histo[:live] pid(类内存使用的柱状图)两种命令。非常强大!可编程循环调用,以查看程序运行期间,所有类在不同时期占用内存的细节(具体到byte)。内存泄露、突发的大量类创建都能在控制之中。

 

jhat      java heap analyzer tool

Sun提供的文档:http://download.oracle.com/javase/6/docs/technotes/tools/share/jhat.html 。可以将jmap导出的堆的二进制数据用一个web server的形式提供查询分析,可输入object query language查询,也可以直接浏览页面查看。默认端口7000,在页面底端有生成好了的查询。在这里也可以查看类的使用的柱状图。

 

jstat     统计gc和堆、非堆内存信息。统计得更全面一些了。网络中有文章记述:《jstat – Java Virtual Machine Statistics Monitoring Tool》(http://www.meichua.com/archives/tag/jstat),《JDKjstat的用法》(http://www.51testing.com/?uid-77492-action-viewspace-itemid-203728)等。注:其中vmid在本地机器上就是指进程号,在远程机器上需要加上主机名、端口等信息。

 

(附:其他JDK自带的,很强大很强大的命令行工具,在java官网中有汇总文档:《JDK Tools and Utilitieshttp://download.oracle.com/javase/6/docs/technotes/tools/index.html#java

 

JConsole.JPG

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值