Memory management 组件的ColdFusion内存使用情况

Memory management 组件的ColdFusion内存使用情况,memory-management,coldfusion,javabeans,Memory Management,Coldfusion,Javabeans,我正在使用VMC创建一个站点,并使用bean将数据从模型传输到控制器/视图 我计划实现一些基本的、非常简单的缓存,如果bean没有改变,它们将存储在一个简单的结构中(随着使用的增长,我们将在1.3版左右实现一个更好的缓存系统) 所以问题是我们的豆子里有什么 一种类型的bean将只保存基本数据,并依赖一些外部服务来完成其余的工作(联系DAO获取查询,解析查询以加载bean值)。正如一位同事反复告诉我的那样,这就是“贫血豆”模型:-) 另一种类型的bean将更加独立。它会知道DAO在哪里,所以会直接

我正在使用VMC创建一个站点,并使用bean将数据从模型传输到控制器/视图

我计划实现一些基本的、非常简单的缓存,如果bean没有改变,它们将存储在一个简单的结构中(随着使用的增长,我们将在1.3版左右实现一个更好的缓存系统)

所以问题是我们的豆子里有什么

一种类型的bean将只保存基本数据,并依赖一些外部服务来完成其余的工作(联系DAO获取查询,解析查询以加载bean值)。正如一位同事反复告诉我的那样,这就是“贫血豆”模型:-)

另一种类型的bean将更加独立。它会知道DAO在哪里,所以会直接调用DAO来获取数据查询。它将包含解析查询和设置属性所需的函数。它基本上将“服务”层与bean结合起来,将直接数据库留在DAO层

当然,对于控制器/视图来说,两个bean的外观和行为都是相同的

但问题是内存以及ColdFusion/Java如何处理它

在贫血模型中,bean只有足够的内存来保存属性变量,只需稍微多加一点,就可以在需要时指向服务

对于第二个类型bean中较重的函数,它会占用缓存中更多的内存吗???bean的每个副本都有方法的完整副本吗

我倾向于认为第二个模型不会有更多的内存,因为它们将“共享”方法,并且只需要属性变量的内存

第二种方法将简化代码库,因为bean需要的代码将更接近bean,而不是分散在DAO和服务之间。而且它将减少服务中的简单函数,这些函数只需将调用传递给bean的DAO,就可以在需要时直接传递给DAO


这个问题有意义吗??或者至少我是怎么问的?

默认情况下,所有cfm页面都编译到内存中,CFC需要隐式存储在内存中(例如应用程序范围),以避免每次都实例化它,但您这样做时,同一组件需要相同的内存,任何额外的使用将取决于您在组件或bean中存储的任何数据。
你看过ColdSpring吗?

所有的内存管理都是在Java级别进行的,所以它遵循相同的规则。在Java中,创建对象实例时分配的唯一“新”内存是其成员变量;组件/类本身的方法没有内存足迹:这些东西只在内存中存储一次,并返回一个引用


一个可能的考虑是,CFC的每个方法都被编译为自己的离散类(为什么?我不知道),因此每个方法都是自己的类。与Java类使用相比,这可能意味着CFC使用的内存占用略大一些,但这仍然不会随着对象实例化而扩展:对象的每个实例仍然只会消耗其成员变量的内存,而不是定义对象的CFC方法的内存。

这个问题是有意义的。你只需要一个比我聪明的人来回答。为国际奥委会使用ColdSpring。好东西。查看ColdBox的总体框架。这正是我所认为的方法所发生的事情。我不认为CF/Java会愚蠢到用每个实例重新编译和存储方法。因为您可以将任何方法分配给CFML中的任何对象?只是猜测