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

  • 相关阅读:
    生活重心
    做自己才对,想多只会徒增烦恼
    列下计划,一个个实现吧
    公司搬迁
    限制文件的类型
    总结
    mvc mvp mvvm区别
    sessionStorage
    localStorage点击次数存储
    2016.09.01 html5兼容
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4734746.html
Copyright © 2020-2023  润新知