java - 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
2024-08-31 08:29:59
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;
而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为Eden、Survivor(又可分为From Survivor和To Survivor)、Tenured;
方法区和堆都是各个线程共享的内存区域,用于存储已经被JVM加载的类信息、常量、静态变量、JIT编译器编译后的代码等数据;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在常量池中,常量池是方法区的一部分,
栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,栈和堆的大小都可以通过JVM的启动参数来进行调整,栈空间用光了会引发StackOverflowError,而堆和常量池空间不足则会引发OutOfMemoryError。
String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量是放在方法区的。
最新文章
- 【转】Duff's Device
- 美国安全公司HBGary——国家授命的黑客
- <;实训|第十二天>;用LVM对linux分区进行动态扩容
- 安装JBPM6运行环境(JBPM6学习之二)
- spark的安装
- SCCM日志存放路径
- Spring MVC静态资源处理——<;mvc:resources />; ||<;mvc:default-servlet-handler />; 转载
- android 带边框的圆角按钮
- 100天成就卓越领导力:新晋领导者的First100训练法
- POJ 1091 跳蚤 容斥原理
- bzoj1059: [ZJOI2007]矩阵游戏
- An exception occurred during configuration of persistence layer.
- ORACLE数据库管理常用查询语句
- GitHub 系列之「Git速成」
- maven的安装与配置(本地仓库、阿里云镜像设置)
- SpringCache学习实践
- 【2017-2-21】C#分支语句,分支嵌套,变量的作用域
- (1)MySQL(入门操作安装\基本指令)
- crm作业知识点集合[二]
- Herding(hdu4709)三点运用行列式求面积