初识JVM中堆栈的存储

本文介绍了Java虚拟机(JVM)的内存结构,包括堆、栈和方法区。堆主要存放对象,方法区存储类的描述和static变量。栈则用于存放方法中的局部变量和对象引用。堆溢出可通过创建大量对象引发,而栈溢出常由递归造成。Java允许通过JVM参数调整内存大小以优化性能。
摘要由CSDN通过智能技术生成

       Java语言有一个非常重要的特点就是跨平台性,可以在不同的操作系统上使用同一段Java程序,这得益于Java虚拟机(JVM),Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)

       在JVM中,堆区只有一个,方法区只有一个,栈可以有多个,并且堆的大小要大于栈的。

       在方法区中,用来存储关于类的描述,包含所有的class和static类型的变量,这些变量在整个程序中唯一,所以方法区也被称为静态区,被所有进程共享。

       在堆中,用来存放类的对象,被所有线程共享,在堆中不存放基本类型和对象引用,只存放对象本身。

       在栈中,用来存放方法中的局部变量(成员变量在堆区),以及对象的引用,每个线程只包含一个栈区,并且为自身独有,其他栈不可以访问,存在多少个线程就有多少栈。栈有3个部分:基本类型变量区、执行环境上下文、操作指令区。

       

       想要在程序中看到堆溢出的现象,可以执行下面的Java程序:

public class TestHeap {
	private static int i = 1 ;
	@Test
	public void heapOverflow(){
		User[] arr = new User[1024];
		for(int i = 0 ; i < 1024 ; i ++){
			arr[i] = new User();
		}
	}
}
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值