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)

  • 相关阅读:
    大型网站技术架构-阅读笔记1
    如何发挥一个字节的极限,存储大量内容
    利用easyui创建一个简单的登录页面
    linux tomcat 快捷操作
    linux 安装jdk
    Linux-查看服务器的信息
    HTTP协议(1)
    Linux-ps命令
    Linux-tcpdump命令
    转载-测试新人培训方法之目标法
  • 原文地址:https://www.cnblogs.com/king-peng/p/10048358.html
Copyright © 2011-2022 走看看