IBM i 上 Java Break Memory 介绍与问题分析

引言

很多使用 IBM Java 虚拟机的用户常常有这样一个疑问:我的程序是应该用 32 位 JVM,还是选择 64 位 JVM?

我们知道 ,  和 64 位 JVM 相比,32 位 JVM 具有如下优点:

启动速度快

运行速度快

对同一应用而言,占用的系统资源少

显而易见 , 32 位 JVM 是用户的首选。但是 , 采用 32 位寻址 , 32 位 JVM 的可用的内存空间远比 64 位的小得多 , 所以有些时候用户不得不使用 64 位 JVM。用户常会问这样的问题 : 我的 Java 作业究竟需要多少内存 ?

要回答这一问题,首先要弄清楚 Java 作业的内存结构。Java 应用程序运行时占用的内存包括两部分:Java Heap 和 Break Memory。 相比较而言,Java Heap 是一个熟悉的术语,它是指对为 Java Object 所准备的空间, 这些 Java Object 会由 JVM 的垃圾回收机制所管理。Break Memory 也是 JVM 内存方面的一个术语 。

本文主要讨论 Break Memory,同时介绍 IBM i 上 JVM 的内存分配模型以及如何判断问题是 Break Memory 上的 OutOfMemory。

什么是 Break memory

相对 Heap Memory 而言,Break Memory 又叫内部内存或私有内存 .  Break Memory 是在 JVM 中通过 malloc 方式申请的空间 , 具体来说 , 它由如下几个部分使用 :

Thread Stacks

JVM 的 C/C++ 代码

用户的 Native 函数代码及 Pase 的 Native 函数

为了更好的理解内存结构 , 下面给出了 32bit 内存空间图表 ( 表 1):

在这个图表中可以看到 , 程序的内存被分成 16 个分区 , 每个分区是 256M, 这样一个程序共占用 256*16 = 4G 空间。程序内存的这种布局有如下特性 :

有几个内存分区是被预先安排为其他用途 , 这几个分区是不能作为 Java Heap 或 Break Memory 使用的。

Heap Memory 和 Break Memory 使用的空间总额是固定的 , 它们共同占用这些区间 . 在表 1 上 , 从 0x3 到 0xC 是 Break Memory 和 Heap Memory 的空间 . Break Memory 从 0x3 分区开始分配空间 , 而从 0xC 分区按照分区反方向预先保留出来内存空间将留给 Heap Memory 使用 .  Heap Memory 预先保留占用的分区越多 , Break Memory 能使用的分区就越少 , 反之亦然 .

当一个分区其中的任何一部分用做 Heap Memory,则整个分区都将保留下来做这个特定用途使用 , Break Memory 不能再使用这一分区。

在 JVM 启动的时候 , 可以设定为 Heap Memory 所保留的最大内存空间(-Xmx), 默认是 2GB。

很多时候 , 程序并没有设定 Heap Memory 大小 . 在这种默认情况下 , 内存的分配布局是 :

Heap Memory 占用 8 个分区 , 2048M. (2048 / 256 = 8)

为运行 JVM 有 6 个内存分区做其它方面的用途 , 包括内核 , 应用程序文本 , 栈数据 , 共享类库文本 , 等等 .

剩下 2 个内存分区留给 Break Memory: (16 total) - (8 heap) - (6 reserved) = 2

另一种常见的情况是设定 Heap Memory 最大为 1500M, 此时 :

Heap Memory 一共占用 6 个分区 , (1500 / 256 = 5.8)

同上面一样 , 有 6 个内存分区做其它方面的用途

剩下 4 个分区 (1024 MB) 留给 Break 内存

图 1. 标准模式

时间: 2024-10-28 02:28:15

IBM i 上 Java Break Memory 介绍与问题分析的相关文章

如何鉴定是Java Break Memory不足的问题

很多使用 IBM Java 虚拟机的用户常常有这样一个疑问:我的程序是应该用 32 位 JVM,还是选择 64 位 JVM? 我们知道 , 和 64 位 JVM 相比,32 位 JVM 具有如下优点: 启动速度快 运行速度快 对 同一应用而言,占用的系统资源少 显而易见 , 32 位 JVM 是用户的首选.但是 , 采用 32 位寻址 , 32 位 JVM 的可用的http://www.aliyun.com/zixun/aggregation/17967.html">内存空间远比 64 位

介绍IBM i上提供的Java相关工具及分析方法

包括 i 6.1 及以上所提供的 WRKJVMJOB 等的相关工具以及 STRSST 中提供的相关宏的介绍.本文选择一些笔者在工作和实践过程中经常使用的功能和选项进行讲解,并穿插一些http://www.aliyun.com/zixun/aggregation/17253.html">常见问题的总结和思考. IBM Technology for Java(IT4J) 是 IBM 的 Java 虚拟机,它也是 IBM i 操作系统中的 Java 虚拟机的趋势.我们通常称此 java 虚拟机为

使用 Java Print Service API 在 IBM i 上打印文档

Java Printer Service (JPS) 介绍 JPS (Java Print Service) 是一套为 Java 程序提供 IBM i 上打印服务的 Java 类库.它支持很多不同格式的文档打印,如:PDF,PS,PCL.你可以使用它提供的一些类 来编写关于打印的应用程序.使用时通常分为三步:首先选择合适的打印服务,然后指定打印数据的格式,最 后将打印作业提交给打印服务进行打印. 在 IBM i 服务器上,JPS 对应的 jar 包是 /QIBM/ProdData/OS400/J

如何使用Java Print Service API在IBM i上打印文档

JPS (Java Print Service) 是一套为 Java 程序提供 IBM i 上http://www.aliyun.com/zixun/aggregation/14291.html">打印服务的 Java 类库.它支持很多不同格式的文档打印,如:PDF,PS,PCL.你可以使用它提供的一些类来编写关于打印的应用程序.使用时通常分为三步:首先选择合适的打印服务,然后指定打印数据的格式,最后将打印作业提交给打印服务进行打印. 在 IBM i 服务器上,JPS 对应的 jar 包是

对IBM i上的Electronic Service Agent(iESA)进行介绍

Electronic Service Agent 是一个可以运行在多种平台上具有类似功能的多个应用的统称,主要用于监控.管理系统资源.周期性地收集系统资源和系统状态并向 IBM 服务中心传输,以及对系统中出现的问题向 IBM 服务中心进行汇报.这样,当客户机器上出现问题的时候,IBM 服务中心就可以更快地作出响应:并且通过收集用户机器上的软硬件信息,IBM 可以更精准全面地理解用户系统平台的信息,从而对出现的问题进行更准确的判断和诊治.可以运行 Electronic Service Agent

介绍IBM Toolbox for Java工具包的基本使用方法

IBM Toolbox for Java 是一个类的集合,用于开发与 IBM i 相关的 Java 应用程序.它包含的各类工具,提供了对于 IFS.IBM i 系统信息.客户端 / 服务器等各类应用场景的的支持,用户可以在其他平台诸如 Windows,Linux 上面方便的使用 IBM Toolbox for Java 开发运行在 IBM i 上的应用程序,为用户的编程和调试带来了极大的方便.我们在这些操作系统平台上,通过几行简单的代码就可以访问一台 IBM i 系统,对系统进行相应的控制和更改

AIX平台上基于IBM JDK的Java应用内存泄漏分析

Java 开发者一般不需要考虑内存释放问题,全交由 GC 去处理.但是在一些生产环境中,JVM 经过长时间运行后,即使是一些很小的未释放的 Java 对象,日积月累也会导致内存资源枯竭,最终使 Java http://www.aliyun.com/zixun/aggregation/36295.html">应用崩溃的问题.本文将就一个 AIX 平台上基于 IBM JDK 开发的 Java 应用内存枯竭的实际案例分析过程,来引领读者理解基于 IBM JDK 的 Java 应用内存泄漏调查方法

介绍IBM i上J9 JVM崩溃的常见原因

IBM Technology for Java(IT4J,又名 J9) 是 IBM 自己开发的 Java 虚拟机,被发布在 IBM 的各个操作系统上.IBM i 从 5.4 版本中开始引入 J9,从 6.1 开始,系统默认的 Java 虚拟机 是 J9,从 7.1 开始,C++lassic JVM 不再被支持,J9 是 IBM i 上唯一的支持的 Java 虚拟机. 在 IBM i 上 ,PASE(Portable Application Solution Environment) 提供了一个仿

如何使用 IBM Toolbox for Java 开发 IBM i 应用程序

概述 IBM Toolbox for Java 是一个类的集合,用于开发与 IBM i 相关的 Java 应用程序.它包含的各类工具,提供了对于 IFS.IBM i 系统信息.客户端 / 服务器等各类应用场景的的支持,用户可以在其他平台诸如 Windows,Linux 上面方便的使用 IBM Toolbox for Java 开发运行在 IBM i 上的应用程序,为用户的编程和调试带来了极大的方便.我们在这些操作系统平台上,通过几行简单的代码就可以访问一台 IBM i 系统,对系统进行相应的控制