关于jvm内存的几点

  jvm在运行时分为方法区(Method Area) 、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、堆 (Heap)、程序计数器 (Program Counter Register)。其中 Method Area和 Heap是线程共享的,VM Stack,Native Method Stack和Program Counter Register 是非线程共享的

  一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。那么程序开始运行后,都是如何涉及到各内存区域的呢?

  概括地说来,JVM初始运行的时候都会分配好 Method Area(方法区)Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。

  程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的。

  方法区:存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

  虚拟机栈:描述的是java方法执行的内存模型,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。是线程隔离的。 局部变量表存放的是编译期的各种基本数据类型(boolean,byte,char,short,int,float,long,double)、对象引用和returnAddress类型

  本地方法栈:为虚拟机使用到的Native方法服务

  Heap: 实现线程共享的内存区域,在虚拟机启动时创建。主要是存放对象实例

  运行时常量池:用于存放编译期生成的各种字面量和符号引用

最新文章

  1. MVC中的@符号
  2. SpringMVC学习--校验
  3. C++ 参考网站
  4. 行锁sqlserver
  5. hdu 5432 Pyramid Split 二分
  6. <a>制作按钮
  7. freeswitch 拨号时添加自定义变量
  8. Ubuntu中Samba的安装配置和使用[图文]
  9. BZOJ 3572 世界树(虚树)
  10. ubuntu14.04中 gedit 凝视能显示中文,而source insight中显示为乱码的解决的方法
  11. redis入门(15)redis的数据备份和恢复
  12. Tensor基本操作
  13. 深度理解 React Suspense(附源码解析)
  14. Django Forms 表单
  15. (转载)Spring定时任务的几种实现
  16. iOS 阅读唐巧博客心得
  17. swt text 回车 defaultSelected
  18. Sharing Code Between Silverlight and Win8 app metro
  19. 100度享乐电商网 jQuery
  20. libsvm参数说明[zz]

热门文章

  1. 【hdu 2486】A simple stone game
  2. 小强的HTML5移动开发之路(39)——jqMobi插件json格式ActionSheet
  3. KeePass v1.30
  4. Android 开发者工具
  5. eclipse配置本地服务
  6. 【BZOJ 1020】 [SHOI2008]安全的航线flight
  7. 【t014】拯数
  8. SQL表的最基本操作练习
  9. TensorFlow: couldn’t open CUDA library cupti64_80.dll、InternalError: Blas SGEMM launch failed
  10. NET媒体文件操作组件TagLib