通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用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"这个字面量是放在方法区的。

最新文章

  1. 【转】Duff's Device
  2. 美国安全公司HBGary——国家授命的黑客
  3. <实训|第十二天>用LVM对linux分区进行动态扩容
  4. 安装JBPM6运行环境(JBPM6学习之二)
  5. spark的安装
  6. SCCM日志存放路径
  7. Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> 转载
  8. android 带边框的圆角按钮
  9. 100天成就卓越领导力:新晋领导者的First100训练法
  10. POJ 1091 跳蚤 容斥原理
  11. bzoj1059: [ZJOI2007]矩阵游戏
  12. An exception occurred during configuration of persistence layer.
  13. ORACLE数据库管理常用查询语句
  14. GitHub 系列之「Git速成」
  15. maven的安装与配置(本地仓库、阿里云镜像设置)
  16. SpringCache学习实践
  17. 【2017-2-21】C#分支语句,分支嵌套,变量的作用域
  18. (1)MySQL(入门操作安装\基本指令)
  19. crm作业知识点集合[二]
  20. Herding(hdu4709)三点运用行列式求面积

热门文章

  1. python中的命名空间以及函数的嵌套
  2. Zookeeper详解-API(六)
  3. http协议内容展示以及如何用telnet发送请求
  4. 深入V8引擎-AST(1)
  5. 前端Vue基础学习
  6. 【Netty整理02-详细使用】Netty入门
  7. mysql批量update操作时出现锁表
  8. 长春理工大学第十四届程序设计竞赛(重现赛)B
  9. Python将pyc转为py
  10. Linux服务器使用Docker部署.net Core项目