为什么长 cfc 文件在 CF8 中有效,而在 CF9 中无效?获取“分支目标偏移量太大而不能短”错误

Jay*_*son 1 coldfusion cfc

我有一个相当长的 cfc 文件,大约 1800 行,在 ColdFusion 8 中运行良好,但是在将我的开发系统升级到 ColdFusion 9 并进行一些测试后,我收到了 cfc 的编译错误,消息显示“分支目标偏移量也是如此大为短”。我修改了文件以消除一些未使用的功能并合并一个以使其更短,这解决了问题以使其正常工作。但是,为什么现在我升级到 CF9 时它就死在我身上了?还有其他人在以前或当前版本的 ColdFusion 中遇到过这个问题吗?除了升级jvm等修改cfc文件还有其他解决办法吗?

编辑 如果你有我的问题的答案,太好了!发布那个,但不要浪费时间告诉我一些我已经知道的事情。如果您要发布回复,请仔细阅读问题并仅在您知道答案时才回答。不要进行谷歌搜索并发布我已经知道并用来使代码工作的废话。问题是,为什么它在 CF8 中有效,而现在在 CF9 中无效?除了我所做的,还有其他解决方案吗?

Cla*_*Liu 5

正如您已经知道的,这是 JVM 固有的问题,CF9 可能向组件添加了更多的先天函数,如果所有方法都通过一个巨大的 switch 语句引用,并使用一个 short 作为偏移量,我们的偏移量指针空间会更少与每个连续版本一起工作。从 CF7 迁移到 CF8 的人也有同样的问题。

所以简短的回答是否定的。

您找到的大多数建议基本上都是告诉您将一个大方法拆分为一个较小的方法和几个辅助方法。我第一次遇到这个问题时,这适用于我拥有的大型 cfc。但是随着它变大,没有多少辅助函数可以修复它。最终它不得不被拆分成多个 cfc。

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

编辑
看起来我之前的问题是一个不同的函数太大了,将 CFC 拆分为多个 CFC 是错误的。从那以后,我将该问题方法拆分为更小的方法,并且能够将所有功能合并到一个 CFC 中。所以这就是看起来的解决方案。