操纵及时Java举行开辟,第2部份 改良服务质量[Java编程]
本文“操纵及时Java举行开辟,第2部份 改良服务质量[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java 利用程序中的易变性(普通是由暂停或耽误招致的,其发生时间无法猜测)大概在整个软件栈中发生.耽误可由以下因素惹起:
硬件(缓存期间)
固件(处理 CPU 温度数据等系统管理中止的历程中)
操作系统(呼应一此中止或履行按期调度的后台活动)
在相同系统上运行的其他程序
JVM(垃圾汇集、当即编译和类加载)
Java 利用程序本身
很难在较高级别上补偿较初级别上的耽误,所以,假如您试图仅在利用程序级别办理易变性,您大概只是转移了 JVM 或 OS 耽误,并没有办理实际问题.幸运的是,较初级别的耽误大概对比高级别上的耽误相对短一些,所以只有在降低易变性的需求非常激烈时,才需求深化到比 JVM 或 OS 更低的级别上.假如需求不是那么激烈,您可以将精神集合在 JVM 级别上或利用程序中.
及时 Java 供应了必要的工具来堵截 JVM 和利用程序中的易变性源头,拜托用户要求的服务质量.本文具体介绍 JVM 和利用程序级别上的易变性源头,介绍可用于减轻其影响的工具和技术.然后介绍一个简单的 Java 服务器利用程序来演示此中一些概念.
办理易变性源头
JVM 中的易变性主要源自于 Java 语言的动态特点:
内存毫不会被利用程序显式释放,而是被垃圾汇集器按期回收.
类在被利用程序初次利用时才举行解析.
本机代码在利用程序运行时由当即(JIT)编译器编译(并且可以重新编译),基于常常调用的类和办法.
在 Java 利用程序级别上,线程管理是与易变性相关的关键区域.
垃圾汇集暂停
当垃圾汇集器回收程序不再利用的内存时,它可以终止任何利用程序线程.(这种范例的汇集器称为 Stop-the-world 或 STW 汇集器).大概它可以与利用程序同时履行自己的一些工作.无论是哪类情形,垃圾汇集器需求的资源都不能供利用程序利用,所以,众所周知,垃圾汇集(GC)是 Java 利用程序性能中的暂停和易变性的源头.固然很多 GC 模子都具有自己的优缺陷,但当利用程序的目标是缩短 GC 暂停时,两个主要的挑选将是分代(generational)和及时 汇集器.
分代汇集器将堆组织为至少两个部份,这两个部份普通称为新 和旧(有时称为保存)空间.新对象始终在新空间中分配.当新空间耗尽闲暇内存时,将仅在该空间中举行垃圾汇集.利用相对较小的新空间大概时 GC 周期更短.在多次新空间垃圾汇集历程中存留下来的对象会被晋升到旧空间中.旧空间垃圾汇集发生的频率普通比新空间垃圾汇集低得多,但是由于旧空间比新空间大得多,所以这些 GC 周期大概长得多.分代垃圾汇集器供应了相对较短的平均 GC 暂停时间,但是旧空间汇集的开销大概招致这些暂停时间的尺度毛病非常大.关于活动数据集不会常常更改,但会产生大量垃圾的利用程序而言,分代汇集器是最有效的.在这种场景中,旧空间汇集极少发生,因此 GC 暂停时间取决于短的新空间汇集时间.
与分代汇集器相反,及时垃圾汇集器会掌握自身的行为,以明显缩短 GC 周期的长度(通过在利用程序闲暇时履行周期)或减轻这些周期对利用程序性能的影响(通过基于与利用程序之间的一种 “契约”,以更小的增量履行工作).利用这类汇集器,您可以猜测完成特定任务的最遭情形.比方,IBM® WebSphere® Real-Time JVM 中的垃圾汇集器将 GC 周期划分为较小的工作片段(称为 GC 限额),这些限额可以增量方法完成.对限额的调度对利用程序性能的影响极小,其耽误可低至几百微秒,普通小于 1 毫秒.为了到达这种耽误级别,垃圾汇集器必须可以筹划自己的工作,办法是引入利用程序操纵契约 的概念.此契约管理答应 GC 中止利用程序履行工作的频率.比方,默许的操纵契约为 70%,也就是在及时操作系统上运行时,仅答应 GC 利用每 10 毫秒中的至多 3 毫秒,典型的暂停时间大约为 500 微秒.(拜见 “及时 Java,第 4 部份: 及时垃圾汇集”,获得对 IBM WebSphere Real Time 垃圾汇集器操作的具体介绍).
在及时垃圾汇集器上运行利用程序时,堆大小和利用程序操纵率是要考虑的重要调优选项.随着利用程序操纵率的增添,垃圾汇集器完成其工作的时间会更短,因此需求更大的堆来确保 GC 周期可以增量式地完成.假如垃圾汇集器无法跟上分配速度,GC 将采取同步汇集.
比方,与在利用分代垃圾汇集器的 JVM 上(未供应操纵契约)运行时相比,在 IBM WebSphere Real-Time JVM 上运行的利用程序(具有 70% 的默许利用程序操纵契约)默许需求更大的堆.由于及时垃圾汇集器掌握着 GC 暂停时间的长度,所以增添堆大小会降低 GC 频率,不会延伸各次暂停时间.另一方面,在非及时垃圾汇集器中,增添堆大小普通会降低 GC 周期的频率,这会降低垃圾汇集器的总体影响.当发生垃圾汇集时,暂停时间普通会更长(因为需求查抄更大的堆).
在 IBM WebSphere Real Time JVM 中,可以利用 -Xmx<size> 选项调整堆大小.比方,-Xmx512m 指定堆大小为 512MB.还可以调整利用程序操纵率.比方,-Xgc:targetUtilization=80 将操纵率设置为 80%.
以上是“操纵及时Java举行开辟,第2部份 改良服务质量[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |