zoukankan      html  css  js  c++  java
  • java----Java的栈,堆,代码,静态存储区的存储顺序和位置

    更多了解:https://blog.csdn.net/zhangbaoanhadoop/article/details/82193497

    栈的特点如下

      1.栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量,引用变量(方法中声明的对象的引用)、操作数、方法出口等)
      2.JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
      3.栈属于线程私有,不能实现线程间的共享!
      4.栈的存储特性是”先进后出,后进先出"(比如线程调用一个方法a,在栈用开辟一块空间存放线程a的所有的变量,方法a中调用方法b,在开辟一块空间存放方法b的所有的变量),如图所示,当方法b执行完毕,存放方法b中栈帧销毁,等方法b执行完毕,方法a执行完毕,方法a的栈帧销毁(体现出了先进后出)

      

      5.栈是由系统自动分配,速度快!栈是一个连续的内存空间

    堆的特点如下

    1.堆用于存储创建好的对象和数组(数组也是对象)

    2.JVM只有一个堆,被所有线程共享(堆中的对象不一定被所有的线程共享)

    3.堆是一个不连续的内存空间,分配灵活,速度慢!

    方法区(又叫静态区)特点如下

    1.JVM只有一个方法区,被所有线程共享!
    2.方法区实际也是堆,只是用于存储类、常量相关的信息!
    3.用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

    java值传递

    对于基本数据类型传递就是值的内容

    对于引用类型,传递的是内存地址

    public class Demo {
        public static void main(String[] args){
            int a = 1;
            new Demo().test(a);
            System.out.println(a);
    
            String str = "str";
            new Demo().test1(str);
            System.out.println(str);
    
            ArrayList<Integer> integers = new ArrayList<>();
            new Demo().test2(integers);
            System.out.println(integers);
    
            ArrayList<Integer> integers1 = new ArrayList<>();
            new Demo().test3(integers1);
            System.out.println(integers1);
        }
        public void test(int a){
            a++;
        }
        public void test1(String str){
            str = "str"+str;
        }
        public void test2(List<Integer> list){
            list.add(1);
        }
        public void test3(List<Integer> list){
            ArrayList<Integer> integers = new ArrayList<>();
            integers.add(2);
            list = integers;
        }
    }

    传递值是str类型,原因在于string是不可以变的,如果对它进行修改,就会重新创建一个对象

  • 相关阅读:
    zkRollup原理(转载)
    2012元旦遭遇坑爹的12306订票网站付了款不出票
    VM.xPort.ExcelClient XXX备忘
    Parsing html markup text using MSHTML
    Asp.net中模仿Winform的MessageBox
    ReportViewer 2008 打印出现Error loading resource library. (0x8007007E)和(0x80070006)
    使用ADO.net将数据导出到Excel并提供下载
    【备忘】Oracle常用系统表(做代码生成器用得到)
    Worm.Sober.b(“清醒”病毒)
    发布基于T4模板引擎的代码生成器[Kalman Studio]
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10658154.html
Copyright © 2011-2022 走看看