JVM java堆内存
Posted 嘿十三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM java堆内存相关的知识,希望对你有一定的参考价值。
应用程序以及相关数据将决定Java堆空间占用需求。通过静态内存,可“预测”下面的内存需求:
- 确定将会有多少不同的应用程序部署到预先计划的一个单独的JVM进程上,例如有多少个ear文件、war文件、jar文件等。在一个JVM上部署的应用程序越多,对本机堆的需求就越多。
- 确定有多少个类需要在运行时加载:包括第三方API。越多的类加载器和类在运行时被加载,在HotSpot VM PermGen空间和内部JIT相关优化对象上的需求就越高。
- 确定数据缓存占用,如应用程序加载内部缓存数据结构(和第三方API),例如数据库中的数据缓存,从文件中读取数据等。数据缓存使用越多,Java Heap OldGen空间需求就越高。
- 确定允许建立的中间件线程数量。这是非常重要的,因为Java线程需要足够的本机内存,否则会抛OutOfMemoryError异常。
在JVM进程上部署的应用程序越多,对本地内存和PermGen空间的要求就越高。数据缓存并不是序列化为一个磁盘或数据库,它将从OldGen空间里面需要额外的内存。
你有5个ear应用程序(2000多个Java类)要部署(包含中间件代码)
- 本地堆需求估计为1GB(必须足够大以处理线程创建等等。)PermGen空间大约是512 MB。
- 内部静态缓存大约500MB
- 在高峰时间,总预测流量是5000个并发用户
- 每个用户的会话数据大约500K
- 在高峰期间,总流量会话要求是2.5GB。
正如你所看到的一样,在如此情况下,32位JVM进程就无法满足。一个典型的解决方案是进行流量拆分,在几个JVM进程或物理主机(假设有足够的硬件和CPU core可用)上。
大多数时候,业务流量将推动内存占用。除非你需要大量的数据缓存来实现适当的性能,典型的门户应用网站(媒体)繁重的应用程序需求。数据缓存太多的时候应该用一个黄色的标志标注一下,最好早点去重新审视一下一些设计元素。
以上是关于JVM java堆内存的主要内容,如果未能解决你的问题,请参考以下文章