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)

  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/king-peng/p/10048358.html
Copyright © 2011-2022 走看看