java中的栈、堆、方法区

本文详细解读Java中的栈、堆和方法区,包括它们的特点、存储内容和作用,以及如何影响程序运行效率。重点介绍了数据类型分配、对象存储和生命周期管理。

栈(stack)

Java栈与堆不同每一个线程都有一个stack,栈的区域非常小,大概只有1M左右,但是存储速度非常快,所以我们把快速执行的任务存储在stack。

特点:自动分配,连续空间,先进后出原则。

1、基本数据类型(一共有八种:char、byte、short、int、long、float、double、boolean)直接分配在栈空间。

2、引用数据类型直接分配在栈空间,例如

int[] nums = new int[10];

这个nums就是对象的引用,JVM在栈空间分配了一个地址空间给nums,栈空间中的地址引用指向了堆空间中的对象。

3、方法的形式参数也直接分配在栈空间。

4、局部变量(在方法中定义,随着方法调用而存在,随着方法调用完毕而销毁,没有初始化的值,使用前必须定义和赋值)直接分配在栈空间,当局部变量所在方法执行完成之后该空间便立刻被JVM回收。

堆(heap)

JVM中只有一个堆,在虚拟机开启时创建,所有的线程都共用这一个堆。

特点:是不连续,而且是被所有线程共享的内存区域。

1、存储创建new出来的对象,每个对象都包含一个与之对应的class的信息,而new对象的引用地址会储存在stack栈中。

2、存储数组。

方法区(method)

方法区(method)又叫静态区,

特点:方法区与堆一样是被所有线程共享的内存区域,方法区包含的都是整个程序中永远唯一的元素。

1、这里主要存储的就是类(class)、静态方法、静态变量、常量以及成员方法,还有我们常说的常量池也是方法区的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值