为什么长cfc文件在CF8中工作,而不是CF9?获得“分支目标偏移量太大而不是短”错误

时间:2010-01-08 17:18:10

标签: coldfusion cfc

我有一个相当长的cfc文件,大约1800行,在ColdFusion 8中运行良好,但在将我的开发系统升级到ColdFusion 9并进行一些测试后,我得到一个cfc的编译错误,并且消息显示为“Branch”目标偏移量太大而不能“。我修改了文件以消除一些未使用的函数并合并一个以使其更短,这解决了问题,使其工作。但是,当我升级到CF9时,为什么它现在死在我身上?在之前或当前版本的ColdFusion中,是否有其他人遇到此问题?除了修改cfc文件之外是否有其他解决方案,例如升级jvm?

修改 如果你对我的问题有答案,那太好了!张贴,但不要浪费时间告诉我一些我已经知道的东西。如果您要发布回复,请仔细阅读问题并仅在您知道答案时回答。不要做谷歌搜索和发布我已经知道并用来使代码工作的垃圾。 问题是,为什么它在CF8中起作用,现在不在CF9中?除了我做了什么之外还有其他解决方案吗?

3 个答案:

答案 0 :(得分:4)

这是JVM固有的问题,正如您所知,CF9可能会为组件添加更多固有功能,如果这些方法都是通过一个巨大的switch语句引用的,并且使用short作为偏移量,那么我们可以减少偏移指针空间以使用每个连续版本。从CF7到CF8的人也遇到了同样的问题。

如此简短的回答是否定的。

您发现的大多数建议基本上都告诉您将大型方法拆分为较小的方法和几种辅助方法。我第一次遇到一个问题,这适用于我有一个大型cfc。但随后它变得越来越大,没有多少辅助函数可以修复它。最终它必须分成多个cfcs。

PS:这个人说删除交易有帮助(CF7),虽然没有包裹我的电话,所以这不是一个有保证的解决方案我猜http://www.coldfusionmuse.com/index.cfm/2007/9/28/Branch.Target.Offset

修改
看起来我之前的问题是一个不同的功能太大,将CFC分成多个CFC是错误的。我已经将问题方法分解为更小的方法,并且能够合并一个CFC中的所有函数。所以这就是解决方案。

答案 1 :(得分:2)

如果您还没有,请尝试在CFAdmin页面“调试和记录>代码分析器”中运行代码分析器。这是一个有用的工具,可以找到CF8和CF9之间语言所做的一些更改。

我们不得不更改几个变量名和函数名,因为CF在9中添加它们。

另请查看:

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ff0.html

答案 2 :(得分:1)

CF版:10 操作系统:Linux CentOS 6.0

面对类似的问题我在我的cfc中有1300多行代码,而且在一个晴天我得到了“分支目标偏移...”错误。我试过了

  1. 代码分析器找到遗留的任何漏洞 - DID NOT FIX

  2. 编辑cfc以减少冗余代码或注释的最后一点 - 减少了大约20行代码 - DID NOT FIX

  3. 我将代码分成2个cfc并将其扩展到另一个 - DID NOT FIX

  4. 我删除了任何不需要的查询和数组转储(测试的一部分):此工作

  5. 所以我建议您确保没有任何大型数据内容的转储。希望这会有所帮助。