Java进程内存使用值得注意的几点

1. 当我们通过命令行启动一个Java应用时,JVM是作为一个一般的操作系统进程运行的。因此,Java运行时和其它进程一样都面临着本机处理器提供的寻址能力和操作系统提供的用户空间对内存使用的限制。
32位处理器寻址范围可达2^32即4GB, 64位处理器寻址范围可达2^64位即16exabyte,其中相当一部分寻址范围都会被操作系统内核占用。Windows默认占用的的内存是2GB,导致32位Windows下任何进程最多占用2GB内存。

进一步阅读:
http://sinewalker.wordpress.com/2007/03/04/32-bit-windows-and-jvm-virtual-memory-limit/

2. 有时会发现同样的Java应用在64位机器上运行时比在32位机器上用了更多的内存,性能也有所下降。这是因为JVM中指向对象的指针在32位下占用4个字节,在64位下要占用8个字节。
进一步阅读:
http://blog.juma.me.uk/2008/10/14/32-bit-or-64-bit-jvm-how-about-a-hybrid/
http://blog.juma.me.uk/tag/compressed-oops/
http://www.docstoc.com/docs/36747975/Improving-64-bit-Java-performance-using-Compressed-References

3. HotSpot JVM从1.6.0_14开始提供-XX:+UseCompressedOops选项改善其在64位下的表现。在java堆小于32G情况下打开该选项,JVM会将引用指针压缩至4个字节来减少内存占用。1.6.0_23之后改选项就默认打开了。
进一步阅读:
http://www.oracle.com/technetwork/java/javase/6u14-137039.html
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

4. Java进程用到的内存重要非heap和heap两大块,通过-Xms和-Xmx设置的只是heap的大小。所以经常见到Java进程占用比-Xmx设置更多的内存就没啥奇怪了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值