JVM内存分为哪几部分?各个部分的作用是什么?

 

1. Java虚拟机内存的五大区域 
Java的运行离不开Java虚拟机的支持,今天我就跟大家探讨一下Java虚拟机的一些基础知识。 
JVM内存区域分为五个部分,分别是堆,方法区,虚拟机栈,本地方法栈,程序计数器。 

  1. 堆。 堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上,Java堆可使用-Xms -Xmx进行内存控制,值得一提的是从JDK1.7版本之后,运行时常量池从方法区移到了堆上。
  2. 方法区。它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区在JDK1.7版本及以前被称为永久代,从JDK1.8永久代被移除。
  3. 虚拟机栈。虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
  4. 本地方法栈。与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
  5. 程序计数器。指示Java虚拟机下一条需要执行的字节码指令。 
    以上五个区域是Java虚拟机内存划分情况,其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。 
    所以Java在通过new创建一个类对象实例的时候,一方面会在虚拟机栈中创建一个该对象的引用,另一方面会在堆上创建类对象的实例,然后将对象引用指向该对象的实例。对象引用存放在每一个方法对应的栈帧中。

最新文章

  1. 浅谈UML的概念和模型之UML九种图
  2. windows系统下在dos命令行kill掉被占用的pid (转)
  3. C语言运算符优先级和口诀(转)
  4. 关于OpenVPN的入门使用
  5. 在Linux用户空间做内核空间做的事情
  6. PLSQL_性能优化系列12_Oracle Index Anaylsis索引分析
  7. TortoiseSVN文件夹图标不显示的解决方法
  8. 设计模式之Memento(备忘机制)
  9. Eclipse自动生成文档注释
  10. Angular vs React 最全面深入对比
  11. SpringMVC框架(一)
  12. 杭电oj-1002-A+B Problem
  13. PGM:有向图模型:贝叶斯网络
  14. 换目标啦,初识PHP
  15. 洛谷P4926 [1007]倍杀测量者(差分约束)
  16. HDU 1089 到1096 a+b的输入输出练习
  17. tomcat发布项目,运行不了
  18. linux中grep/egrep的使用
  19. 异常之交叉编译---arm-vfp-linux-gnu/bin/ld: cgic.o: Relocations in generic ELF (EM: 3)
  20. spring aop的配置

热门文章

  1. 高德定位腾讯定位在APP上无法开启定位权限的解决方案
  2. DP入门练习
  3. RN调试
  4. 编写个makefile文件测试patsubst 的作用
  5. PAT Basic 1036
  6. eclipse中tab键设置
  7. 二分查找与 bisect 模块
  8. Knockout v3.4.0 中文版教程-1-入门和安装
  9. Python基础之(判断,循环,列表,字典)
  10. 【01】markdown语法