Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS Lambda-Java静态初始化_Java_Java 8_Initialization_Aws Lambda - Fatal编程技术网

AWS Lambda-Java静态初始化

AWS Lambda-Java静态初始化,java,java-8,initialization,aws-lambda,Java,Java 8,Initialization,Aws Lambda,在AWS lambda函数(用Java编写)中,我想使用AsyncHttpClient()。 不幸的是,创建此对象的实例大约需要500毫秒。。(但我仍然喜欢它,请不要建议我更改http客户端) 我正在考虑在静态初始化块中创建AsyncHttpClient。因此,AWS可能会执行一次,然后在每次AWS Lambda执行时克隆快照。我说得对吗 在AWS Lambda中何时执行静态块 在每次AWS Lambda调用中克隆一次快照 或者对每个Lambda执行分别执行静态块(这无助于将Http客户端的创

在AWS lambda函数(用Java编写)中,我想使用AsyncHttpClient()。 不幸的是,创建此对象的实例大约需要500毫秒。。(但我仍然喜欢它,请不要建议我更改http客户端)

我正在考虑在静态初始化块中创建AsyncHttpClient。因此,AWS可能会执行一次,然后在每次AWS Lambda执行时克隆快照。我说得对吗

在AWS Lambda中何时执行静态块

  • 在每次AWS Lambda调用中克隆一次快照
  • 或者对每个Lambda执行分别执行静态块(这无助于将Http客户端的创建放在那里)
感谢您的帮助

从来没有为您的Lambda执行环境拍摄过“快照”。然而,有一个容器重用的概念。当函数第一次在新容器中运行时,将调用静态初始化块,发送到该容器的每个后续Lambda执行将能够跳过初始化步骤。每次Lambda为Lambda函数启动一个新容器时,初始化工作都需要再次进行

我建议阅读有关Lambda容器重用的内容。

从来没有拍摄过Lambda执行环境的“快照”。然而,有一个容器重用的概念。当函数第一次在新容器中运行时,将调用静态初始化块,发送到该容器的每个后续Lambda执行将能够跳过初始化步骤。每次Lambda为Lambda函数启动一个新容器时,初始化工作都需要再次进行


我建议阅读有关Lambda容器重用的内容。

正如
markb
所解释的,没有“快照”这样的东西

AWS在第一次调用Lambda时启动执行上下文,然后在下一次请求中重用它。然而,这并不能保证。AWS可随时关闭此上下文,或创建其他上下文以在负载较重时缩放Lambda

执行上下文由容器、JVM和定义处理程序函数的Java类的单例实例组成


因此,我不建议在静态块中进行任何“一次性”初始化,而是在类的构造函数中进行初始化。这将大大提高代码的可测试性。

正如
Mark B
所解释的,没有“快照”这样的东西

AWS在第一次调用Lambda时启动执行上下文,然后在下一次请求中重用它。然而,这并不能保证。AWS可随时关闭此上下文,或创建其他上下文以在负载较重时缩放Lambda

执行上下文由容器、JVM和定义处理程序函数的Java类的单例实例组成

因此,我不建议在静态块中进行任何“一次性”初始化,而是在类的构造函数中进行初始化。这将大大提高代码的可测试性