降低COBOL与其他语言进行交互时产生的性能影响

在本文中,作者会解释让 C++OBOL 与其他语言进行交互所产生的性能影响,并给出一些提示来避免被动受制于不利影响。

几十年前,当我初次开始使用大型机 COBOL 时,我发现它不能与非 COBOL 语言交互。我与一位教授探讨将这作为一个论文题目,主要探讨让 COBOL 与非 COBOL 语言进行交互所产生的性能影响。

为了弄明白可能会有什么性能影响,我基于 “A ">Fortran Interface to the CODASYL database task group specifications”(参阅 参考资料)试验开发了小型 COBOL/Fortran 接口。Fortran 是当时非常流行的一门语言。

我注意到,一些 COBOL 数据类型在 Fortran 中没有等效的数据类型。不再需要的数据或对象仍然在磁盘上。我看到,当分配的内存超过所需内存时,就会出现堆栈溢出的迹象。我使用正确的 Fortran/COBOL 数据类型解决了这些问题。我在需要时调用子程序,并在不需要时释放它们,以这种方式规避内存限制。当时处理器的容量上限很低,无法与我们今天看到的大容量处理器相比。

在本文中,我会给出一些提示,教您如何避免在 COBOL 与 Java、C/C++、DB2 和 Oracle 进行交互时被动受制于其性能影响。

避免超时 使用编译脚本
遵循数据转换规则 预防
内存泄漏 删除本地引用

接口性能影响:Java 与 C/C++

在我第一次使用 Fortran 时,它已广泛流行于计算界。如今,Java® 是继 C/C++ 之后最流行的语言,可作为与 COBOL 交互的接口。Fortran 目前深受科学家喜爱,但在普通人群中的17891.html">流行度则有所下降。

使用 Java 作为接口

您可以让一个 COBOL 程序调用一个 Java 程序,而后者会调用一个不同的 COBOL 程序。如果在设计 Java 程序时不够谨慎,您可能会遇到导致性能影响的内存问题。这些问题包括内存泄漏、高内存使用率、无效对象创建和无效的垃圾收集器行为。其他一些性能问题包括跟踪对象本地引用和在线程中使用本地引用所产生的问题。

Java 中的内存泄漏是由于引用不再需要的对象而产生的。高内存使用的一个来源是低效配置的缓存和并行访问系统的大量活动用户。

当用户负载增加时,无效对象创建会变得很明显,因为垃圾收集器必须不断清理堆积物。这可能导致垃圾收集器具有较高的处理器消耗。当垃圾收集器配置不当时,会发生无效的垃圾收集器行为。

仅当您调用的方法处于运行状态时,对象的本地引用才是有效的。本地引用的自动释放并不总是发生在本地方法返回之后。在显式删除全局引用之前,它们仍然是有效的。当您尝试从一个线程向另一个线程传递本地引用时,本地引用会变得无效。为了确保没有在垃圾收集过程中过早释放对象,Java 虚拟机 (JVM) 会跟踪本地和全局引用。

如果没有显式释放本地引用,系统会在以下两种情况下耗尽内存。

情况 1:您在一个方法中访问一个大型对象,以创建对象的本地引用,将它们用于大量计算。本地引用预防在垃圾收集过程中释放该对象。 情况 2:您没有同时使用一个方法中创建的所有本地引用。在一个 COBOL 方法中,您对一个大型对象数组执行循环,
获取元素作为本地引用,并在每一次迭代时对元素进行操作。在每一次迭代之后,不会自动释放对数组元素的本地引用。

使用 C/C++ 作为接口

在一个 C/C++ 程序中,当调用堆栈上使用了过多内存时,就会发生堆栈溢出。堆栈上分配的内存比实际需要的多。回调中的堆栈大小取决于系统架构和可用的内存量。

降低一个给定 C/C++ 程序的有效堆栈大小之后,堆栈溢出情况会更加严重。如果在多线程模式下运行程序,与没有线程支持或分配给单一线程的程序相比,具有多线程的程序每个线程具有更少堆栈空间。

在 COBOL 与 C/C++ 程序之间的调用中,当您尝试调用使用一种语言的函数、而该函数会破坏另一种语言的程序堆栈框架时,就会出现性能问题。对于不会导致有效堆栈框架崩溃和终止的语言,不利影响可能会导致堆栈溢出。

例如,可能无法执行语言的正常清理或退出功能,比如使用 COBOL 在运行单元终止过程中关闭文件,使用非自愿终止的语言清理动态获取的资源。

时间: 2024-08-30 00:58:40

降低COBOL与其他语言进行交互时产生的性能影响的相关文章

COBOL和Java在SaaS应用程序中交互时遭遇多线程挑战

回到云岛:所有 SaaS 用户都很高兴.因为他们能获得快速响应.因为这些用户惟一拥有的控制权就是对访问应用程序的控制,他们不担心应用程序是否有多线程例程:也不担心在云中有多少核心用于并行加速多线程的处理.问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来. 当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢:直到用户无法忍受.他们这时才发现: 只有一个核心在正常运行,其余核心都发生了故障. SaaS 订阅仅限于两个核心,而不是所有四个核心. SaaS 应用程序近来升级出现

ios-Unity、iOS交互时,Unity调用iOS出错

问题描述 Unity.iOS交互时,Unity调用iOS出错 Undefined symbols for architecture armv7: "__PressButton1", referenced from: RegisterMonoModules() in RegisterMonoModules.o "__PressButton0", referenced from: RegisterMonoModules() in RegisterMonoModules.

c语言-用VS6编写C语言,编译时弹出这个文件不存在是怎么回事?怎样解决?

问题描述 用VS6编写C语言,编译时弹出这个文件不存在是怎么回事?怎样解决? 用VS6编写C语言,编译时弹出这个文件不存在是怎么回事?怎样解决? 解决方案 安装完整版本的VC++ 6.0,新建一个项目,把你原来的项目的代码复制粘贴到新的项目,再编译. 原版的VC++下载:http://download.csdn.net/album/detail/639 (我亲自上传,并且不要任何积分)

c语言问题-C语言程序运行时出现的问题

问题描述 C语言程序运行时出现的问题 /* Note:Your choice is C IDE */#include ""stdio.h""int main(){int fac(int n);int n;int y;printf(""input an integer number:n"");scanf(""%d&n"");y=fac(n);printf(""%

vc vc++-关于VC和matlab交互时的环境设置问题! 求急救~

问题描述 关于VC和matlab交互时的环境设置问题! 求急救~ 我是matlab菜鸟 配置环境的时候好像有点问题,请各位大侠帮忙解答一下.以下是我的配置: 即按照教程设置:在工程->设置->目录里配置了mclmcrrt.lib libmx.lib libmat.lib mclmcr.lib libeng.lib LibUDTable.lib libMyAdd.lib 在tools->options->Directories->include 里设置了 E:MATLAB7EX

flex java-在flex和java web工程交互时无法调用到JAVA端的方法

问题描述 在flex和java web工程交互时无法调用到JAVA端的方法 刚接触这方面,开始做helloWord实验就出错了,所以不可能是JAVA代码的问题:Flex界面能显示正常,但调用不了JAVA类.remoting增加了destination,Flex和JAVA整合环境按网上教程配置的,工具是Myeclipse6.5,Flex3.麻烦知道的大神指点下,感激不尽

ajax与数据库交互时 session丢失了怎么办

问题描述 ajax与数据库交互时 session丢失了怎么办 问题补充:session中保存用户登录信息 解决方案 你的意思是session失效吧? 普通的交互失效后会有相应处理.如果ajax调用失效后,请求失败状态应该是timeout,可以通过js判断得出结果,再处理失效后的一些逻辑,比如给出提示?或者返回登陆页?....解决方案二:session丢失可以考虑使用cookie辅助实现,session不存在就读取cookie.解决方案三:你问的太不明确了.别人都不好回答你.解决方案四:是不是超时

java-外围系统跟核心系统进行交互时需要用到哪些接口

问题描述 外围系统跟核心系统进行交互时需要用到哪些接口 外围系统跟核心系统进行交互时需要用到哪些接口啊,求大神告知. 解决方案 一般来说外围程序是不受信赖的,所以不能直接连你的系统,而是用过web service之类的api接口连接.比如说你可以参考支付宝的支付接口,或者微博微信的oa2.0接口. 解决方案二: 哪方面的?外围系统要干什么?核心系统是啥?说清楚一些才方便答哈

c语言-我的C语言基础入门时编写一个代码,出现问题,希望得到求解。

问题描述 我的C语言基础入门时编写一个代码,出现问题,希望得到求解. 它提示我说的 --------------------Configuration: one - Win32 Debug-------------------- Compiling... one.c D:C语言MSDev98MyProjectsoneone.c(12) : error C2065: 'FebSold' : undeclared identifier D:C语言MSDev98MyProjectsoneone.c(1