码迷,mamicode.com
首页 > 其他好文 > 详细

堆,栈,常量池

时间:2018-03-08 17:18:39      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:memory   最大   基本数据   垃圾回收   AC   存储   编译器   方法调用   flow   

java 中保存new 出来的对象(每个对象都包含一个与之对应的class的信息,【class信息存放在方法区】),堆中分配的内存,有虚拟机的自动垃圾回收器管理,栈内存只对其所属线程可见。

java 中保存一些基本数据类型 (int,long,byte,double,float,char,boolean,short)和引用变量,堆内存对所有线程可见。

 

异常错误

如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。
而如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

 

空间大小

栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈很快就会充满。如果递归没有及时跳出,很可能发生StackOverFlowError问题。
你可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值。

 

方法区:

又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

 

String a = new String("abc"); 产生一个或者两个对象。会先去常量池看有没有"abc"对象,若果没有则创建一个,然后堆中再创建一个常量池中此 ”abc” 对象的拷贝对象。

堆,栈,常量池

标签:memory   最大   基本数据   垃圾回收   AC   存储   编译器   方法调用   flow   

原文地址:https://www.cnblogs.com/cws-kf/p/8528937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!