济南助企网站建设公司怎么样,哪个网站的ppt模板最好,wordpress slider 插件,天猫购物商城直接上下载地址 jclasslib是一个独立的工具#xff0c;不是包含在JDK中的工具#xff0c;需要自己进行下载#xff0c;下载地址如下#xff1a; http://downfile.downcc.com/down/JClassLib_windows.zip 什么是局部变量表 在《java中的栈》中我们说到了一个栈帧至少需要包含… 直接上下载地址 jclasslib是一个独立的工具不是包含在JDK中的工具需要自己进行下载下载地址如下 http://downfile.downcc.com/down/JClassLib_windows.zip 什么是局部变量表 在《java中的栈》中我们说到了一个栈帧至少需要包含局部变量表、操作数栈、帧数据区这三个部分。局部变量表是用于保存函数的参数以及局部变量的。顾名思义局部变量表中的变量只在当前的函数的用中有效当函数调用结束后随着函数栈帧的销毁局部变量表也会随之被销毁。 由于局部变量表在栈帧之中因此如果函数的参数和局部变量很多会使得局部变量表膨胀因此每一次函数调用其局部变量表就会占用更多的栈空间最终导致函数的嵌套调用的次数减少。 代码来帮忙 public class TestStackDeepth {private static int length0;public static void recursion(long a,long b,long c) {long e1,f2,g3,h4,i5,k6,q7,x8,y9,z11;length;recursion(a, b, c);}public static void main(String[] args) {try {recursion(1l,2l,3l);} catch (Throwable ex) {System.out.println(length);}}
} 使用jclasslib 打开jclasslib选择对应的3中.class文件 加载好的jclasslib界面如下图所示 在jclasslib中可以看到recursion函数的最大局部变量是26个字。因为该函数一共13个参数和局部 变量而且都是long类型。 查看class文件的局部变量表的内容下图中的局部变量表是指class文件的一个属性而不是上文中所说的 java栈中的每个栈帧的局部变量表 从上面可以看到在class文件的局部变量表中显示了每个变量的作用域范围所在槽位的索引index列、变量名name列和数据类型列J表示long型。 栈中的局部变量表的槽位是可以重复利用的如果一个局部变量过了其作用域那么在其作用域之后申明的新的局部变量很有可能会复用过期局部变量的槽位从而达到节省资源的目的。 槽位复用的例子 public class IndexReuse {public static void method1() {int a0;System.out.println(a);int b0;}public static void method2() {{int a0;System.out.println(a);}int b0;}public static void main(String[] args) {}
} method1中的局部变量表由于a和b的作用范围都是整个函数所以b不用复用a的槽位 method2中的局部变量表由于a只在{}中起作用所以b在a之后可以复用a的槽位因此a和b的槽位都是0 从上面的例子我们可以体会到局部变量的声明位置会影响垃圾回收器对变量所占内存空间的回收因此在以后的程序设计中我们应该尽可能的进行优化从而提高性能。 转载于:https://www.cnblogs.com/shugen/p/6862982.html