Object ColdFusion CFC实例创建的生命周期是什么?

Object ColdFusion CFC实例创建的生命周期是什么?,object,coldfusion,components,instance,cfc,Object,Coldfusion,Components,Instance,Cfc,我想知道cfc是如何在coldfusion引擎盖下实例化的!。我知道您创建了组件的一个实例,您将获得对新创建的实例的引用,您可以使用它来调用其中的公共方法 但是当我写代码的时候到底发生了什么 <cfscript> person = createObject('component','human') // what happen here!!!! person.speak(); </cfscript> 现在在很高的负载下。我发现person obj的内存没有释放,在某

我想知道cfc是如何在coldfusion引擎盖下实例化的!。我知道您创建了组件的一个实例,您将获得对新创建的实例的引用,您可以使用它来调用其中的公共方法

但是当我写代码的时候到底发生了什么

<cfscript>
 person = createObject('component','human') // what happen here!!!!
 person.speak();
</cfscript>
现在在很高的负载下。我发现person obj的内存没有释放,在某个点上达到了200mb。。真奇怪。因此,按照最佳实践中的说法进行了更正

request.person = duplicate(application.person);
现在有另一种直接的方法是

request.person = createObject('component','human');
不同的是,第一个创建对象并将其保留在共享范围内,每次请求时都进行深度复制以请求(这里只创建一次实例)。第二种方法是在每次发出请求时创建实例。它们之间肯定存在性能差异,因为在第二种方法中,每次都会创建实例。我想知道创建一个实例背后的体系结构到底是什么,使得它比前者更好


只有居里夫妇知道

Coldfusion编译成Java,当您调用“createObject”函数时,您正在创建该类的实例。以下是一些可能有助于进一步解释的链接:


据我所知,它在cfc内部运行init方法/函数,然后运行speak方法/函数。

那里发生了什么?没什么特别的

对于CFC,
init()
只是一个用于初始化实例的方法。如果您不需要构造函数,CFC甚至不需要它。然而,它通常被社区采用的约定所包含,源于ColdFusion选择使用
init()
调用Java构造函数*

function init()
{
  // init vars in Variable scope if needed...

  return this;
}
在CF9中,当您使用
new
操作符时,如果它可用,它将为您调用
init()
,如果您的CFC没有定义
init()
方法,它不会抛出任何错误

*在调用Java方法时,
init()
被转换为调用Java类的正确构造函数。如果只想调用该类的静态方法,请直接调用该方法,而不使用
init()

function init()
{
  // init vars in Variable scope if needed...

  return this;
}