Java 如何计算/近似递归函数的堆栈帧使用的内存?

Java 如何计算/近似递归函数的堆栈帧使用的内存?,java,recursion,memory,stack,stack-frame,Java,Recursion,Memory,Stack,Stack Frame,我希望能够根据递归函数的参数,计算或至少近似计算递归函数的特定堆栈帧将使用多少内存,以字节或其他形式表示 例如,递归函数的堆栈帧可能有多少内存 示例递归函数(int[]数组,int n)的取值?您可以使用参数的大小加上恒定的返回地址大小来近似计算。对于你的例子来说,它是小的:int []是指针类型(对于java、C++或C语言),使用4或8字节(取决于代码是否运行在32或64位),int是4字节,返回地址也是4或8字节。因此,此函数的优化堆栈帧为32位12字节,64位32字节(由于填充)。在调试

我希望能够根据递归函数的参数,计算或至少近似计算递归函数的特定堆栈帧将使用多少内存,以字节或其他形式表示

例如,递归函数的堆栈帧可能有多少内存
示例递归函数(int[]数组,int n)的取值?

您可以使用参数的大小加上恒定的返回地址大小来近似计算。对于你的例子来说,它是小的:int []是指针类型(对于java、C++或C语言),使用4或8字节(取决于代码是否运行在32或64位),int是4字节,返回地址也是4或8字节。因此,此函数的优化堆栈帧为32位12字节,64位32字节(由于填充)。在调试模式下运行时,可能会使用一些额外的字节。此外,函数中的任何局部变量也会增加堆栈帧的大小。细节可能更复杂一些

你能用特定的语言标记吗?我猜是C/C++或Java。我最感兴趣的是Java。所以从本质上讲,堆栈帧使用的内存量是参数的数据类型使用的内存量,加上一些其他常量,如局部变量和返回地址大小?@sidharthramanan:正确。局部变量不是常量,但除此之外就是常量。请注意,这实际上只是变量的大小,而不是它们指向的对象的大小。因此,类类型的引用变量只使用4或8个字节。