IBM JDK

IBM JDK IBM Software Developers Kit(SDK)


IBM Java平台是以Oracle开发的Java Technology 为基础实现的,IBM 提供了两个安装程序包:

   IBM Software Developers Kit(SDK)

  Java Runtime Environment(JRE)

WebSphere Application ServerJREIBM SDK已随产品安装,JRE里包含了JVM IBM J9 VM)(Oracle JDK中的称为HotSpot虚拟机)

IBM SDK Java Technology Edition, Version 6中查看IBM SDK JVMJ9 VM)版本:

通过 java -version 命令可以查看到JVM 版本,在IBM SDK v6中有两种构建级别:

IBM J9 VM (build 2.4, JRE 1.6.0 ....)

IBM J9 VM (build 2.6, JRE 1.6.0 ....)

不同版本的IBM SDK 包含不同的JVM实现:

6>> IBM J9 VM build 2.4 JRE 1.6.0IBM J9 VM build 2.6 JRE 1.6.0

7>> IBM J9 VM build 2.6 JRE 1.7.0

Websphere Application Server v7JVM J9 VM 2.4v8v8.5中为J9 VM 2.6

注意:

IBM SDK v6 对应 Oracle Java SE Development Kit(JDK) 的Java SE 6.0(1.6.0),在软件的开发和运行阶段需要保持对应的版本。

在早期的WAS版本中,产品安装包中并未提供JAVA环境 ,需要我们自行安装受支持的JDK。为了避免单独安装JDK带来的各种问题,和更好的发挥产品的性能,最后在WAS中提供了IBM SDK

IBM SDK vJVM为我们提供了4种不同的GC策略:

JVMJ9 VM 2.4)中的GC策略:

1optthruput WAS_V8版本前的默认策略)

2optavgpause 

3gencon 

4subpool 

JVMJ9 VM 2.6)中的GC策略:

1optthruput (已移除subpool策略,如果指定了subpool,那么将会使用optthruput

2optavgpause 

3gencon WAS_V8版本的默认策略)

4balanced 

JVM内存管理中,主要负责内存的分配与回收:

分配内存:

为请求分配内存空间,每次分配时线程都需要获取一个堆锁,阻止并发线程访问。这种情况可能会造成瓶颈,为了能更有效率的分配堆空间,线程使用之前本地已分配缓冲区分配对象,称为高速缓存。线程在高速缓存中申请内存时,不需要获取堆锁,对于对象的大小一般都是在512 byte64JVM 768 byte)以内,如果高速缓存中存在较大的对象,那么也可以为新的申请分配较大的空间。高速缓存有时也可称为TLH(线程局部堆),TLH的大小在512 byte64JVM 768 byte)到128KB之间,当TLH空间使用完后,线程会使用堆锁再申请新的TLH空间。

回收内存:

当内存空间不足(内存碎片严重)导致JVM 无法从堆中分配对象时,将触发GC进程。

回收过程有三个阶段:mark标记-sweep清理-compaction压缩,压缩这一步并不是总会发生。

压缩阶段:如果一下任何一个条件为true,并且未指定 -Xnocompactgc,那么将发生压缩

1、指定了 -Xcompactgc

2、在清理阶段之后,没有足够的可用空间能够用于满足当前分配需求

3、已请求 System.gc(),并且上一次分配故障触发的全局垃圾回收未进行压缩,或者以指定 -Xcompactexplicitgc

4TLH分配至少消耗了一半先前可用的内存(确保一个精确的样本),并且TLH的平均大小降至小于1024个字节

5、清除器已启用,并且清除器无法在最近一次清除中永久占有的最大对象大于永久占有空间的最大可用项

6、堆已完全扩展并且可用旧空间不足4%

7、可用堆小于128KB

理解不同的GC策略:(我们可以在JVM添加启动参数,指定GC策略-Xgcpolicy:gencon)

1、optthruput

禁用并发标记,如果能够接受应用程序较长时间的暂停,使用该策略可获得最佳吞吐量。

2、optavgpause

使用并发标记和并发清扫,暂停时间比optthruput更短。在应用程序运行期间,并发的执行一部分垃圾回收工作(牺牲部分吞吐量),从而减少了应用程序暂停时间。通常在堆大小很大时(4G),可以考虑使用此策略。

3gencon

使用并发标记与分代垃圾回收技术(以不同方式处理短期存活的对象和长期存活的对象),尽可能的减少应用程序垃圾回收时的暂停时间。当你的应用程序拥有很多短期存活对象或者堆空间出现碎片化时,可以考虑使用此策略。

4、subpool

禁用并发标记,适合IBM pSeries 和 zSeries 平台上多处理器系统(16及更多)使用。

5、balanced

并行垃圾回收技术,没有使用并发标记。如果遇到了全局垃圾回收,压缩阶段引起的应用程序暂停时间的问题,可以尝试使用此策略。

后面我会介绍这几种GC策略

你可能感兴趣的:(WebSphere)