OOP篇(Java - 对象内存管理)

目录

一、堆内存

[1. 对象存储在堆中](#1. 对象存储在堆中)

[2. 成员变量的生命周期](#2. 成员变量的生命周期)

[3. 垃圾回收机制](#3. 垃圾回收机制)

[4. 内存泄漏](#4. 内存泄漏)

[5. System.gc()方法](#5. System.gc()方法)

二、非堆-栈

[1. 栈存的是方法中的局部变量](#1. 栈存的是方法中的局部变量)

[2. 局部变量的生命周期](#2. 局部变量的生命周期)

[3. 成员变量和局部变量的区别](#3. 成员变量和局部变量的区别)

三、非栈-方法区

[1. 存放类的信息](#1. 存放类的信息)

[2. 方法只有一份,唯一性](#2. 方法只有一份,唯一性)

四、堆、栈、方法区的区别


一、堆内存

1. 对象存储在堆中

JVM的三个区域 : 堆(heap) 、栈(stack)、方法区(method)

JVM为Java程序提供并管理所需要的内存空间

堆中存储使用new关键字创建的对象---数组、String、Person等等。

通过new创建的对象,在堆中。

2. 成员变量的生命周期

当一个引用值为null时,该对象没有任何引用指向,则该对象被视为废弃对象,属于被回收(GC线 程)范围。

成员变量的生命周期: 从对象在堆中创建,到对象从堆中被回收为止。

3. 垃圾回收机制

垃圾回收器(Garbage Collection ,GC),是JVM自带的一个线程(自动运行的),用于回收没有任何引用指向的对象。

垃圾回收器会自动帮Java程序员处理垃圾。

在main函数下面,有一个线程自动回收不用的对象,叫做守护线程。

4. 内存泄漏

内存泄漏: 不再使用的对象没有被及时回收,积攒过多导致程序奔溃。

5. System.gc()方法

GC线程不会刚发现无用对象就会回收,如果需要强制回收,则使用System.gc()方法

这个方法强制调度GC线程回收无用对象。

二、非堆-栈

1. 栈存的是方法中的局部变量

2. 局部变量的生命周期

生命周期: 栈帧被创建开始-方法执行完毕栈帧被销毁结束,局部变量也随之销毁。

栈帧中存储的是: 局部变量和参数等。

3. 成员变量和局部变量的区别

类中的变量叫:成员变量;方法中的变量叫:局部变量

成员变量:

  • 定义在类中,方法之外,有默认的初始值
  • 可以不显示的初始化,类实例化后,存储在堆中
  • 对象被回收时成员变量失效

局部变量:

  • 定义在方法中
  • 没有默认值,声明时赋初值
  • 方法被调用时,存在栈中,方法调用结束后,从栈中清除

三、非栈-方法区

1. 存放类的信息

2. 方法只有一份,唯一性

当类的信息加载到方法区时,类中的类方法的定义也被加载在方法区中。

无论创建多少对象,所有的对象是公用方法区中一个方法的定义。

四、堆、栈、方法区的区别

堆存的是成员变量

栈存的是局部变量

方法区存的是类信息

相关推荐
Query*7 分钟前
Agent 开发之项目 AI Native 化:通过大模型与 RAG 赋予产品智能能力
java·人工智能·ai
孫治AllenSun8 分钟前
【LangChain4J-03】Springboot 项目搭建框架
java·spring boot·后端
君顾18 分钟前
AI新零售线上商城系统实战:架构设计与开发全流程指南
java·开发语言·零售
qq_4850152130 分钟前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
lhldsg32 分钟前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY33 分钟前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh34 分钟前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN521235 分钟前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
光电的一只菜鸡37 分钟前
高通tuning中eis需要调什么
java·开发语言·前端
sel_940 分钟前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理