zoukankan      html  css  js  c++  java
  • 【JVM】java棧

    java棧和函数调用的关系图

    【名词解释】
    --->java棧是一块线程的私有空间
    --->java的棧是先进后出的数据结构。函数返回,则该函数的棧帧被弹出。
    --->一个函数对应一个棧帧,一个棧帧里包含局部变量表,操作数棧,棧数据区

    【行为解释】
    --->每次函数调用都会生成相应的棧帧,从而占用一定的棧空间,因为棧空间不足,那么函数调用自然无法继续进行下去。当请求的棧深度大于最大可用深度时,系统会抛出StackOverflowError的棧溢出错误

    【异常】
    --->棧内存溢出java.lang.StackOverflowError

    【参数设定】
    --->-Xss128k 代表线程的最大棧空间为128K

    【棧帧包含的内容解释】
    《局部变量表》
            --->保存所指函数的局部变量,参数。函数局部变量和参数越多则棧帧越大,所占棧空间越多,影响函数的嵌套调用次数。
            --->long和double类型的局部变量占用2个字大小。
            --->int,short,byte,对象引用等占用1个字大小
            --->字:计算机内存中占据一个单独内存单元编号的一组二进制串。一般32位计算机上一个字为4个字节的长度
            --->每个局部变量表中有:作用域范围,所在槽位(索引,变量名,数据类型)后边变量槽位可复用前边已经失去作用域变量的槽位,达到节省空间的目的。
    /**
             *
             * @param a
             * @param b
             * 局部变零表中:this ,a,b,c,d
             * 槽位:this(0),a(1),b(2),c(3),d(4)
             * 所站字的大小为:5个字
             *
             */
            public static void test1(String a,int b){
                    int c=0;
                    System.out.println("Test2.test1()"+c);
                    long d=2;
            }
            
            /**
             *
             * @param a
             * @param b
             * 局部变零表中:this ,a,b,c,d
             * 槽位:this(0),a(1),b(2),c(3),d(3)
             * 所站字的大小为:4个字
             */
            public static void test2(String a,int b){
                    if(true){
                            int c=0;
                            System.out.println("Test2.test2()"+c);
                    }
                    int d=2;
            }

    《操作数棧》
            --->操作数棧也是棧帧中重要的内容之一,主要保存计算过程的中间结果,同时作为计算过程中变量临时存储空间
            --->先进后出的数据结构

    《帧数据区》
            --->访问常量池的指针,方便程序访问常量池
            --->异常处理表。当程序发生异常,根据该表查找相应的异常,进行处理


    棧上分配:
            --->是java虚拟机提供的一项优化技术,基本思想:对于那些线程私有的对象(这里指不可能被其他线程访问的对象),可以将他们打散分配在棧上,而不是分配在堆上。分配在棧上的好处是可以在函数调用结束后自行销毁,而不需要垃圾回收器介入,从而提高系统性能。
            --->棧上分配的一个技术基础是进行逃逸分析。逃逸分析的目的是判断对象的作用域是否有可能逃逸出函数体。
            

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4734746.html
Copyright © 2011-2022 走看看