- 浏览: 129570 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
newhxj:
03-21 10:56:35.850: E/Web Conso ...
Android简易Flash播放器[转] -
roiz:
谢谢 很好正需要这资料
精确监听AbsListView滚动至底部[转]
选择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部署模型,做出最合适的选择依赖于系统的需求,系统的需求才是最重要的。
一个约束需要意识到的是,如果Java应用需要大量的内存占用,把应用部署在单个JVM上面可能需要使用64位JVM上,64位可以提供比32位JVM更大Java堆大小。如果使用64位JVM,需要保证应用使用的任何第三方软件需要支持64位。另外,如果任何使用JNI去调用本地组件,不管是第三方组件还是自己应用开发的程序,需要确保的是他们必须在64位环境下编译。
根据作者的经验来看,越少的JVM数量越好,毕竟越容易维护。
选择JVM Runtime
为Java应用选择JVM Runtime,就是根据实际情况来选择使用合适的client或者server。
Client或者Server Runtime
当使用HotSpot VM的时候,有两种可以选择的JVM runtime。client runtime是快速启动,更小的内存占用以及快速代码(机器码)生成的JIT编译器。server runtime有更复杂的代码生成优化,作为服务型应用更为靠谱。在server runtime中可以发现针对JIT编译器有很多的优化,主要是收集了更多的关于程序的信息,以生成更高性能的代码。
第三种HotSpot VM runtime还在开发中,叫做tiered,他结合了client和server runtime优秀面,即更快的的启动时间和更高性能的生成代码。如果你使用的是Java 6 Update 25,Java 7或者更新的版本,你也许可以考虑使用tiered server runtime替换client runtime。要使用tiered server runtime可以使用这个命令行选项:-server -XX:+TieredCompilation。在这本书编写的时候,还不是极力推荐替换掉client runtime或者server runtime。
小提示:如果你不知道该如何选择,可以先选择server runtime。如果启动时间和内存占用无法接受,可以考虑切换成client runtime或者tiered runtime。依赖于你是使用什么版本的JVM。
32位或者64位JVM
除了client和server runtime的选择,还需要在32位或者64位之间做出选择,HotSpot VM的默认配置是32位的。做出32位和64位的选择取决于应用需要的内存占用以及依赖的第三方库是否支持64位系统——如果有通过JNI使用本地接口。决定应用需要消耗的内存占用,会在下节中介绍。下面的表格列出了一些指导帮助在32位JVM或者64位JVM之间做出选择。注意的是HotSpot VM还没有64位的client runtime。
垃圾回收器
在进入下一步优化之前,需要先做出选择初始的垃圾回收器。在HotSpot VM里面有好几种垃圾回收器可以使用:serial,throughput,mostly concurrent以及garbage first。
由于使用throughput垃圾回收器有可能能够满足应用对暂停时间的需要,可以优先选择throughput垃圾回收器,如果有需要再切换到concurrent垃圾回收器(CMS)。如果有切换到concurrent垃圾回收器的需要,我们将会在后面的优化延迟的时候讨论 。
使用throughput垃圾回收器可以通过HotSpot VM的命令行参数来指定:-XX:+UseParallelOldGC或者-XX:+UseParallelGC。 如果在你的HotSpont VM的版本上-XX:+UseParallelOldGC选项不能使用,使用+XX:UseParallelGC。两者的不同点在于,-XX:+UseParallelOldGC促发了多线程young代的垃圾回收和多线程old代的垃圾回收,也就是说minor垃圾回收和full垃圾回收都是多线程的。+XX:+UseParallelGC仅仅是young代的垃圾回收是多线程的,old代的垃圾回收的单线程的。因此,如果你想要young代和old代的垃圾回收都是多线程的就配置-XX:+UserParallelOldGC。而且-XX:+UserParallelOldGC是兼容-XX:+UseParallelGC。
发表评论
-
Java基于Socket文件传输示例[转]
2012-11-21 17:58 717最近需要进行网络传输大文件,于是对基于socket的文件传输作 ... -
Java基础:三步学会Java Socket编程3[转]
2012-11-21 17:17 797第三步 实现信息共享:在Socket上的实时交流 网络的 ... -
Java基础:三步学会Java Socket编程2[转]
2012-11-21 17:15 715第二步 多个客户同时连接 在实际的网络环境里,同一时间只 ... -
Java基础:三步学会Java Socket编程1[转]
2012-11-21 17:12 799第一步 充分理解Socket ... -
一步步优化JVM七:其他[转]
2012-11-10 23:37 1000边缘问题 在某 ... -
一步步优化JVM六:优化吞吐量[转]
2012-11-07 00:23 6994如果你已经进行 ... -
一步步优化JVM五:优化延迟或者响应时间(3)[转]
2012-11-07 00:20 6664CMS垃圾回收器周期 一旦young的空 ... -
一步步优化JVM五:优化延迟或者响应时间(2)[转]
2012-11-07 00:13 1567优化CMS(concurrent garbage col ... -
一步步优化JVM五:优化延迟或者响应时间(1)[转]
2012-11-06 23:35 1105本节的目标是做 ... -
一步步优化JVM四:决定Java堆的大小和内存占用[转]
2012-11-06 19:21 1100到目前为止,还没有做明确的优化工作。只是做了初始 ... -
一步步优化JVM三:GC优化基础[转]
2012-11-06 18:52 1120本节主要描述关于垃圾回收器性能的三个指标,三 ... -
一步步优化JVM(一)——概述[转]
2012-11-06 18:04 1231现代JVM是一个具有灵活适应各种应用能力的软件,尽 ... -
Filter的用法[转]
2012-10-03 22:01 852filter过滤器主要使用于前台向后台传递数据是的过滤操 ... -
Spring Aop 日志管理[转]
2012-07-14 01:54 1814Spring Aop 日志管理 Sp ... -
Spring中的用于格式化的annotation[转]
2012-06-28 21:51 1998转至http://linksc.iteye.com/blog/ ... -
Hibernate的ID生成策略/联合主键解决方案[转]
2012-06-27 00:22 858转至http://blog.163.com/fengz ... -
HibernateTemplate Callback 2
2012-06-26 23:46 684package com.bee.common.hiber ... -
HibernateTemplate Callback
2012-06-26 23:45 818package com.bee.common.hiber ... -
Spring管理Hibernate事务[转]
2012-06-26 22:56 8281.TransactionProxyFactoryBean ... -
OpenSessionInViewFilter、Session、HibernateTemplate[转]
2012-06-26 22:51 2656从书上我了解到Session接 ...
相关推荐
Java虚拟机JVM:lib_j2re_test.rar
Runtime或System类调用exit()方法或Runtime调用half()方法 JVM的框架: 执行引擎: (字节)解释器 + JIT(java即时编译器) 前者是用 PC计数器 来依次编译每一行代码解释为本地机器指令; 后者是通过 寻找热点代码 进行...
JVM.JS JSRuntime 这是JVM.JS Java到JavaScript编译器和运行时框架的组件。 执照 JVM.JS的此组件已通过LGPLv3许可
JVM内核的各个组成部分 Runtime data areas shared among all threads: Method area: holds the details of each class loaded by the class loader subsystem. Heap: holds every object being created by the ...
一、JVM是什么 JVM :Java Virtual Machine,就是我们耳熟能详的 Java 虚拟机。它只认识 .class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,JVM 是 ...
JRE(Java Runtime Environment)——windows Java运行环境 64bit
Jet 是 Swift-to-JVM 字节码编译器,为 Java 8 Runtime 而准备。Jet 使用 ANTLR 编写。 标签:JetANTLR
java运行环境,也就是jre,全称为Java Runtime Environment,其中包含jvm(Java Virtual Machine)虚拟机和java核心类库。 jvm能将字节码解释成可执行的机器码,机器码和平台相关(不同硬件环境、不同操作系统,...
b) JVM:真正解释字节码文件内容并且和操作 系统交互的部分 Sun(Oracle)已经给每一 款操作系统都写好了现成的JVM JVM组成部分: 类加载器 ClassLoader 字节码校验器 解释执行器 (翻译)逐行的解释执行代码 2.安全 ...
JRE(Java Runtime Environment):它是Java运行环境,包括,java 运行的所需的类库+JVM(java 虚拟机)。 如果你不需要开发只需要运行Java程序,那么你可以安装JRE。例如程序员开发出的程序最终卖给了用户,用户不用...
Java虚拟机(Java Virtual Machine,简称JVM),Java的“一处编译,处处运行”,就是因为Java程序编译成字节码文件后可以在任何计算机的JVM上执行,所以JVM是我们学习Java的重点之一。 JVM = 类加载器(classloader) + ...
一、特性和优势 简单性、面向对象、可移植性、高性能、分布式、动态性、多线程、安全性、健壮性 Write Once、 Run Anywhere 二、JDK、JRE、 JVM JDK: Java Development Kit JRE: Java Runtime Environment JVM: ...
深入理解JVM一、什么是JVM二、JAVA的运行机制三、JVM架构图四、类加载器子系统1、类加载器子系统作用2、加载(Loading)3、链接(Linking)3.1 验证 (Verify)3.2 准备(Prepare)3.3 解析(Resolve)3、初始化4、...
基于GraalVM的AWS Lamba运行时该项目演示了如何使用Graal的SubstrateVM本机映像功能来生成二进制AWS Lambda Runtime,以克服如今基于JVM的lambda的漫长的冷启动时间。 这仍然是一个WIP,但基本功能已经存在,并且...
Nashorn与JDK8——动态语言在JVM上的高性能实现.pdf
JRE 1.4.2 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JVM命令 使用Java代理覆盖标准JRE类,以允许在任何Java应用程序上进行密集调试。 特征: 转储传递给JVM的每个Classfile。 阻止所有JVM出口。 阻止所有Runtime.exec调用。 阻止流程构建器。 阻止awt.Robot。 ...
适用于Java的Apache OpenWhisk运行时变更日志快速Java... 例如,使用以下内容创建一个名为Hello.java的Java文件: import com.google.gson.JsonObject ;public class Hello { public static JsonObject main ( JsonObj
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也...