JVM之优化(部署模型和Runtime)
选择JVM部署模型
JVM部署模型的选择总体来说就是决定应用是部署在单个JVM实例还是多个JVM实例上(这里简单举例说明一下JVM实例,比如:我们常用eclipse开发,启动一个eclipse就是启动了一个JVM实例,然后在JVM中运行一个main程序,又会启动一个JVM实例,两个JVM实例是隔离开的)。哪一个是最适合你的应用的呢?这个是前面说到系统需求和潜在规则来决定的。比如说:假如你要部署您的应用在一个64位的机器上面,可以支持更大Java堆,如果应用依赖第三方的本地代码组件,而且这个第三方暂时不支持64位机器,那么你就必须要强制使用32位的JVM而且要使用更小优化的Java堆。
单实例JVM模型
在单实例的JVM上部署应用,有一个好处,就是可以减低管理成本,毕竟有更少的JVM需要去维护嘛。应用能够使用的总内存更小,由于每一个单独部署的JVM有能够使用的内存上限。
注意:部署应用在单个JVM上存在的挑战是应用的可用性存在极高的风险,比如:JVM失败或者应用灾难性错误。
多实例JVM模型
部署Java应用在多个JVM上面有提高可用性和能够间接降低延迟的好处,由于应用部署在多个JVM上,某一个JVM出错,只会导致应用某部分无法使用,不会导致整个应用无法使用。多JVM部署可以提供低延迟,在多JVM部署中,Java堆的大小倾向于更小,更小Java堆可以允许有更小的垃圾回收暂停,垃圾回收器的暂停是明显影响延迟。另外,如果应用存在明显瓶颈,多个JVM部署可能帮助提升吞吐量,把压力分布到多个JVM上面,可以让用承受更大的压力。
使用多个JVM,JVM可能会和处理器绑定。把JVM和处理器绑定在一起,可以避免应用和JVM的线程在多个CPU上切换,提升CPU cache的命中率。
注意:部署多JVM的挑战在于管理、监控和维护需要更多的努力。
一般建议
- 没有最好的部署模型,只有更合适的,主要还是看需求和资源
- JVM需要大量内存占用,64位JVM可以提供比32位更大的JVM
- 要保证第三方组件支持64位,不管是第三方组件或自己开发的程序,必须在64位环境下编译
选择Runtime
- Client:启动块,占用内存小,32位,例如:eclipse
- Server:启动慢,启动后性能好,32位和64位
- Tiered:更快的启动时间,更高性能的生成代码,java 7 新增
注意:如果不是道使用什么Runtime,就使用Server,对启动时间有限制就用 Client 或 Tiered。
32位或者64位JVM
除了client和server runtime的选择,还需要在32位或者64位之间做出选择,HotSpot VM的默认配置是32位的。做出32位和64位的选择取决于应用需要的内存占用以及依赖的第三方库是否支持64位系统——如果有通过JNI使用本地接口。决定应用需要消耗的内存占用,会在下节中介绍。下面的表格列出了一些指导帮助在32位JVM或者64位JVM之间做出选择。注意的是HotSpot VM还没有64位的client runtime。
选择垃圾回收器
- Serial、Serial old:串行垃圾回收,简单,但是慢
- Parallel、Parallel old:并行垃圾回收,面向吞吐量,适合小内存
- CMS:适用低延迟,但是有内存碎片
- G1:使用大内存的JVM,分块垃圾回收,能保证吞吐量的前提下,控制延迟
相关推荐
JVM内存模型深度剖析与优化
30+个视频+深入理解Java虚拟机(jvm优化+内存模型+虚拟机原理)
JVM性能优化笔记 ------------------------------------------
Java助力需要jvm学习及优化与性能瓶颈分析参考
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
JVM内存模型和性能优化
jvm参数优化后,tomcat稳定可靠,附件为通过长时间在线测试的配置参数文件
jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。
面试题必问的jvm性能优化相关,如何在实际项目中优化jvm,解决项目中性能问题。提升系统的稳定性,以及可维护性。
该文档描述了开发测试环境中Docker及JVM内存限制部署方案
JVM优化方法
jvm性能调优-jvm内存模型和优化-performance-jvm-memorymodel-optimize
关于JVM虚拟机技术的一个非常不错视频教程,可以给想学习JVM原理、内存模型、性能调优等JVM技术的开发人员一个好学习指导。
1、JVM参数推荐 2、Java运行时数据区 3、JVM内存模型 4、堆的内存划分 5、垃圾回收(GC) 6、JVM参数汇总
- 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及通过MAT工具进行分析 - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握VisualJVM工具的使用 - 了解什么是垃圾回收 - 掌握垃圾会回收的常见算法 ...
jvm内存模型.pdf
JVM 内存模型整理
当前,以Hadoop、Spark为...这些大数据处理框架采用分布式架构,使用Java、Scala等面向对象语言编写,在集群节点上以Java虚拟机(JVM)为运行时环境执行计算任务,因此依赖JVM的自动内存管理机制来分配和回收数据对象.
Jvm性能优化-JVM内存结构原理分析03
JVM性能优化:线程锁优化