Java中的栈、堆和方法区

  • 栈是用来保存局部变量、对象的引用和方法调用的现场;
  • 堆是用来保存对象的实例,它也是垃圾收集器管理的主要区域,由于现在的垃圾收集器都是采用分代收集算法,所以堆空间还分为新生代和老年代,其中新生代又进一步分为Eden、Survivor,而Survivor分为from Survivor和to Survivor,老年代为Tenured;
  • 方法区主要用来存放类的信息、常量、静态变量。堆和方法区都是线程共享的,程序中的字面量如直接书写的100、“Hello”和常量都存放在常量池中,并且常量池是方法区的一部分。
  • 栈空间操作起来最快,但是空间很小,通常大量的对象都是存放在堆中,栈和堆的大小都可以通过JVM的启动参数进行设置,栈空间用光了会产生StackOverflowError,堆和常量池空间不足会导致OutOfMemoryError。


String str = new String("hello");

上面的语句中变量str放在栈上,new创建出来的字符串对象放在堆上,而“Hello”这个字面量是放在方法区的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值