- 论坛徽章:
- 0
|
如果楼主的批处理子系统限定的并发job数大于等于1000,并且1000个job同时被提交的话,那么会有楼主所说的情况,并且不仅仅是1000个PGMB占用的工作内存,还包括1000个PGMA所占用的工作内存。
PGMA和PGMB的工作内存何时被释放?
因为PGMA和PGMB的活动组属性是*caller,那么就需要看PGMA的上级的活动组属性才能确定。
1如果活动组属性是*new,那么上级程序结束(无论是否seton lr),就会连带PGMA+PGM的工作内存一括释放。
2如果活动组属性是命名活动组,那么①:RCLACTGRP(该命名活动组)(同一个JOB中其他活动组中的程序发起),会连带PGMA的上级程序+PGMA+PGMB的工作内存一括释放②:JOB结束,JOB关联的所有工作内存会被释放(无论JOB中是否有程序没有SETON LR,无论JOB所持资源都被分配在什么活动组中),还有JOB结束对任何活动组都是一样的道理。
3如果活动组属性是默认活动组,那么内存的回收只有等该JOB结束了。(因为PGMA和PGMB都运行在*CALLER活动组中,那么他们一定是ILE程序,所以无论他们结束前是否SETON LR,他们都不会释放各自的工作内存)
4如果运行在*caller活动组中,那么继续看他的上级程序。
seton lr到底什么意思?
seton lr只是将程序所持的资源清理出程序的工作内存。程序如果没有seton lr,再次被调用时不进行资源的初始化,而是接着前一次的工作状态继续工作。
对于ile(活动组属性不是默认活动组)程序,无论程序是否seton lr结束,都不会影响其工作内存的分配
对于opm(活动组属性是默认活动组)程序,没有seton lr,表示不释放程序使用的资源,那么资源占用的空间当然也不释放,也就是说会保留程序的工作内存。
seton lr和rclrsc是用来回收程序基于工作内存之上的资源,活动组是用来控制内存的分配与回收。
楼主想知道的是ile程序的内存占用的问题,不要考虑seton lr。 |
|