zoukankan      html  css  js  c++  java
  • Java--数组

    **数组到底是如何在内存中存在的呢,我们是如何使用数组的。**

    # 1、基本概念
    每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈。进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享。Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会初始化这个对象中变量。虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也就是说在建立一个对象时在堆和栈中都分配内存,在堆中分配的内存实际存放这个被创建的对象的本身,而在栈中分配的内存只是存放指向这个堆对象的引用而已。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。

    具体的概念:JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method,也叫静态区):

     

    堆区:

    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令) ;
    2.jvm只有一个堆区(heap),且被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身和数组本身;

    栈区:
    1.每个线程包含一个栈区,栈中只保存基础数据类型本身和自定义对象的引用;
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问;
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令);

    方法区(静态区):
    1.被所有的线程共享,方法区包含所有的class(class是指类的原始代码,要创建一个类的对象,首先要把该类的代码加载到方法区中,并且初始化)和static变量。
    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    # 2、数组
    同一种类型数据的集合。其实数组就是一个容器

    数组的内存结构:
    ![alt](http://47.105.184.71:8080/upload/2018/11/ojljo89iu4jotoo2ree3k1fanb.png)

  • 相关阅读:
    Flutter 导航栏上添加搜索按钮
    tabController保活
    nav 选项卡
    flutter 毛玻璃
    [题解]CodeForces878 D
    [题解]CodeForces878C Tournament
    [题解]NOIP2012
    bzoj1070题解
    bzoj1061题解
    bzoj1059题解
  • 原文地址:https://www.cnblogs.com/king-peng/p/10048358.html
Copyright © 2011-2022 走看看