NotionNext
NotionNext
编程爱好者
/互联网从业者
/知识分享博主
认知决定态度,态度决定选择,选择决定人生

Java简单内存模型

NotionNext - 2023-4-11 - Technical / Java / 后端
发布于:2023-4-11|最后更新: 2023-8-29|
type
status
date
slug
summary
tags
category
icon
password

JVM运行时内存区域结构

notion image

Java简单内存模型

Java的内存模型包括了线程共享的和线程私有的两个主要部分。其中,堆被用来存储对象和数组,而栈则被用来存储基本数据类型和对象引用。此外,线程还拥有自己的程序计数器和本地方法栈。这些内存区域的结构对于Java程序的正确性和性能至关重要。
notion image

变量在内存中是怎样存储的?

  • 当创建变量时需要在内存中申请空间
  • 内参系统根据变量类型来分配存储空间,分配的空间只能用于存储该类型的数据
  • 基本类型:存储在栈区,直接存储值
  • 引用类型:对象存储在 heap 区,栈区存储真实对象的地址引用
  • 被用来存储基本数据类型和对象引用,
  • 被用来存储对象和数组,保存 new 出来的对象
  • 方法区被用来存储类的信息、常量、静态变量等

一个程序在内存中是如何运行的?

  • 任何的 java 程序运行一定要通过 main 方法
  • 然后依次执行程序,还没有 new 出来对象之前都是 null,new 出来的对象会被放到 Heap 区
  • 在 Stack 中 user 会存储 user 对象的地址,引用 Heap 中的 user 真实对象
  • Methon Area 存储了 user 对象的方法
notion image
  • 当我们给 user 对象的属性赋值时,Heap 中的user对象属性会发生变化
notion image
  • 当我们调用方法时, 会在 main 方法块的上面创建一个方法栈,叫做栈帧(Stack Frame)
  • 方法栈的特点是后进先出,每个方法的局部变量存在与栈帧中,在一个方法返回之后里面的栈帧就会被销毁,局部变量就变为不可访问了
notion image
  • 然后我们再 new 一个 user2对象
  • user 对象与 user2 对象都是 new 出来的。所以两个对象是不同的地址
notion image
  • 然后我们创建 user3,将 user2 的地址赋给 user3
  • 这时候 user3 和 user2 指向的是同一个对象
  • 改变 user3 的属性时,user2 的属性也发生改变
notion image
  • Java 中的值传递
    • 基本类型传递的是值
    • 引用类型传递的是地址

什么是 this ?

  • 构造器中 this 指向正要初始化的对象地址
  • 普通方法中 this 指向调用该方法的对象地址
  • this 不能用在出现 static 的地方
  • this(): 也可以调用构造方法,必须写在第一行(最前面)
  • 这段代码运行结果如下
notion image
 
 
 
 
Java面向对象之抽象Java面向对象基础知识