JVM存储模型、值传递和引用传递

JVM存储模型、值传递和引用传递

一、首先根据下图理解一下JVM是什么? — Java程序和操作系统之间的桥梁
JVM存储模型、值传递和引用传递_第1张图片
二、Java数据存储模型

JVM存储模型、值传递和引用传递_第2张图片

因为栈区、本地方法栈、程序计数器是线程私有的,每一个线程在运行时会单独去创建这样一个内存,所以说有多少个线程就可能有多少个栈区。
Java的基础数据类型都是值类型,指针也是值类型,因而是直接存到内存而不是存地址再去寻址。
在堆上创建的对象是不能够随着函数的运行完毕自动清理的,因为不知道是否有其他线程也引用了这个对象 — GC机制(垃圾回收机制)
Main函数就是存在于方法区的,还有一些静态的方法和类加载器

Java中有两种传递方式,值传递和引用传递,基本类型和以String str = “aaa” 这种方式创建的字符串都是值传递;对象、数组等都是引用传递。
值传递:形参改变 实参不变
引用传递:形参改变 实参改变
下面通过几个例子来详细说明一下引用传递和值传递的具体区别:
1. 值传递:
JVM存储模型、值传递和引用传递_第3张图片

JVM存储模型、值传递和引用传递_第4张图片
调用方法结束之后栈c会被销毁,此时打印的a依旧是fa,值没有被调用方法所改变,所以成为值传递。
2. 数组和对象
JVM存储模型、值传递和引用传递_第5张图片

JVM存储模型、值传递和引用传递_第6张图片
调用方法结束之后,对象c会从栈中被销毁,但是此时打印出a数组的值为5,2,3
数组的值已经改变,所以称之为引用传递(即传递对象的地址值),对象也是一个道理。

初学者根据b站视频和题目总结的,欢迎指正

你可能感兴趣的:(JavaSE基础,jvm,java,算法)