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

╰半橙微兮° 2024-03-30 03:23 211阅读 0赞

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

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

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

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

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

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

数据都有默认初始化值。

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

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

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

  1. public class User {
  2. int m ;
  3. public void demo() {
  4. int i;
  5. System.out.println(i); //编译时异常,局部变量没有初始化,及没有默认值
  6. System.out.println(m); //运行时,可以输出0
  7. }
  8. }
  9. public class TestDemo {
  10. public static void main(String[] args) {
  11. User user = new User();
  12. user.demo();
  13. }
  14. }

2d32275788ac415fa6f961c2f4b97ca9.png

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读

    相关 (heap)(stack)的区别

    一. 程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 : 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作