Java学习-内存划分及内存的调用关系

一、JAVA内存划分

JAVA的内存可以划分为五个部分:堆、栈、方法区、本地方法区和寄存器。

(Heap):凡是new出来的东西都在堆中

     如:

1 integer = new Integer(2)  // integer(2) 就在堆中
2 
3 int[] arr = {12, 23, 34, 45};  //注意 简化写法在实际编译时仍然会被编译为:int[] arr = new int[]{12, 23, 34, 45};    

     注意:1、堆内存里的东西都有一个16进制的地址值

               2、堆内存里的数据,都有默认值。 如:整数是:0;布尔是:false;引用是:null ...

(Stack):存放的都是方法中的局部变量

   局部变量:①方法的参数  ②方法 {} 内部的变量

  作用域:一旦超出了作用域,立刻从栈内存中消失

  注意:方法一定要在栈当中运行

方法区(Method Area):存储.class相关信息,包含方法的信息

本地方法区():与操作系统相关

寄存器(pc Register):与CPU相关


二、 JAVA内存的调用关系 (堆、栈、方法区)

例子:数组元素赋值

 1 package cn.itcast.day05.demo03;
 2 
 3 public class arrayRAM {
 4 
 5     public static void main(String[] args) {
 6 
 7         // 初始化三个元素的数组并打印
 8         int[] arrayA = new int[3];
 9         System.out.println(arrayA);
10         System.out.println(arrayA[0]);
11         System.out.println(arrayA[1]);
12         System.out.println(arrayA[2]);
13 
14         // 改变数组元素
15         arrayA[1] = 10;
16         arrayA[2] = 20;
17 
18         // 数组赋值并打印
19         int[] arrayB = arrayA;
20         System.out.println(arrayB);
21         System.out.println(arrayB[0]);
22         System.out.println(arrayB[1]);
23         System.out.println(arrayB[2]);
24 
25         // 改变数组元素的值
26         arrayB[1] = 100;
27         arrayB[2] = 200;
28         System.out.println(arrayB[1]);
29         System.out.println(arrayB[2]);
30     }
31 }

上述代码在内存的调用过程:方法区 -> 栈 -> 堆 -> 返回内存地址给栈

注意:1、arrayA 赋值给arrayB的是它的内存地址值。所以arrayA和B完全相同,因为他们使用的是同一块内存地址。

           2、arrayB修改数组元素,ArrayA也会随之更改。

 

原文地址:https://www.cnblogs.com/xuanxuanBOSS/p/10765458.html