IT技术博客大学习 共学习 共进步

Java运行时内存模型

ZavaKid的博客 2011-01-29 22:16:29 浏览 3,242 次

    Java在运行时,可以根据声明周期大致把内存分为两部分:与JVM声明周期一致的内存,与线程生命周期一致的内存。根据Java虚拟机规范第二版,Java在运行时内存可以分为以下6个部分:

PC计数器栈堆方法区运行时常量池本地方法栈

    PC计数器

    每个线程都有自己的PC计数器。在不是本地方法的时候,PC计数器始终记着下一条需要执行的指令。在执行本地方法的时候,PC计数器里面是undefined。

    

    每个线程对应着一个栈。栈(stack)是用来存储帧(frame)的,栈只对帧进行pop和push的操作,每个方法对应一个帧。

    

    堆(heap)的生命周期和JVM是一致的,所有的线程都可以共享堆。当堆里面的东西没有被引用时,垃圾回收器就会回收他们。

    方法区

    方法区也是和JVM的生命周期一致,逻辑上是堆的一部分。里面存着每个class的数据,包括常量池,字段,方法等等。

    运行时常量池

    是方法区的一部分。存储着类或者接口的常量。

    本地方法栈

    也就是在执行本地方法时所需的栈(不怎么了解)。

建议继续学习

  1. Linux内存点滴 用户进程内存空间 (阅读 12,946)
  2. ps - 按进程消耗内存多少排序 (阅读 12,524)
  3. Linux Used内存到底哪里去了? (阅读 11,586)
  4. linux内核研究笔记(一)内存管理 – page介绍 (阅读 10,323)
  5. Linux操作系统的内存使用方法详细解析 (阅读 9,922)
  6. 几个内存相关面试题(c/c++) (阅读 9,264)
  7. Innodb分表太多或者表分区太多,会导致内存耗尽而宕机 (阅读 7,566)
  8. 内存越界的概念和调试方法 (阅读 7,163)
  9. 如何查看Linux 硬件配置信息 (阅读 7,105)
  10. 必看!linux系统如何查看内存使用情况 (阅读 7,063)