【Java】堆(heap)、栈(stack)和方法区(method)

简介: 【Java】堆(heap)、栈(stack)和方法区(method)

栈:调用方法将在栈中开辟内存,称为入栈(压栈)。


栈内存存放基本类型值和引用数据类型的地址。


栈内存中的数据,没有默认初始化值,需要手动设置。


方法调用完成,栈内存立即释放,称为出栈(弹栈)


堆:用于存放使用new创建的对象或数组。


所有的对象都有内存地址值。


数据都有默认初始化值。


堆内存中的对象不再被指向时,JVM启动垃圾回收机制,自动清除。


方法区:与Java堆一样,是各个线程共享的内存区域。


存储已被Java虚拟机加载的类信息、常量、静态变量、以及编译器编译后的代码等。


public class User {
    int m ;
    public void demo() {
        int i;
        System.out.println(i);              //编译时异常,局部变量没有初始化,及没有默认值
        System.out.println(m);              //运行时,可以输出0
    }
}
public class TestDemo {
    public static void main(String[] args) {
        User user = new User();
        user.demo();
    }
}

2d32275788ac415fa6f961c2f4b97ca9.png

相关文章
|
2天前
|
Java
java堆溢出和栈溢出
java堆溢出和栈溢出
7 1
|
4天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
11 2
|
5天前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
18 3
|
3天前
|
Java 测试技术
Java反射之Method的invoke方法详解
Java反射之Method的invoke方法详解
|
7天前
|
算法 Java 机器人
Java数据结构与算法:最大堆
Java数据结构与算法:最大堆
|
7天前
|
算法 Java 机器人
Java数据结构与算法:最小堆
Java数据结构与算法:最小堆
|
2天前
|
存储 监控 算法
Java中的内存管理:从堆到栈的深入解析
Java中的内存管理:从堆到栈的深入解析
|
2天前
|
Java
数组栈(java)
数组栈(java)
6 0
|
7天前
|
算法 Java 编译器
Java数据结构与算法:线性数据结构之栈
Java数据结构与算法:线性数据结构之栈
|
2天前
|
Java 机器人 程序员
Java中的线程通信:wait、notify与Condition详解
Java中的线程通信:wait、notify与Condition详解