1、JVM的内存区域划分:

大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈,也有翻译           成 JAVA 方法栈的),Native Method Stack  ( 本地方法栈 ),其中Method Area 和  Heap 是线程共享的(方法区和堆),其他的几个(VM Stack,Native Method                       Stack  和 Program Counter Register ) 是非线程共享的。

2、为什么分为线程共享和非线程共享

首先我们熟悉一下一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM                上,然 后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。程序开始运行后就会涉及到JVM的这几个区:概括地说来,JVM初始运行的时候都会分配                     好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈)和                             Native Method Stack  (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我们            把内存区域         分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是           系统垃圾回          收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。

3、下面给出JVM的内存模型图

             方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class       对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存          超过其允许的大小时,会抛出OutOfMemory的错误信息

可以参考如下的链接:

http://www.cnblogs.com/sunada2005/p/3577799.html

http://blog.csdn.net/ns_code/article/details/17565503

最新文章

  1. Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网
  2. IT技术开发人员获得成功的六大步骤
  3. asp.net GDI+绘制矩形渐变
  4. 嵌入式应用中CGI编程中POST、GET及环境变量详解
  5. MIME
  6. Tomcat 改变localhost主页,映射到应用地址
  7. Hadoop技巧(04):简易处理solr date 时区问题
  8. js(jquery)绑定点击事件
  9. Physics Experiment 弹性碰撞 [POJ3684]
  10. 深入理解JVM(1)——JVM内存模型
  11. JS实现品字布局
  12. java调用删除文件的方法删除文件,却删除不干净
  13. Neumann's Principle and Curie laws
  14. 定时调度系列之Quartz.Net详解(转)
  15. ARM的ADS汇编器和GCC汇编器
  16. Vue 相关难点汇总
  17. 多线程之CountDownLatch、CyclicBarrier和Semaphore
  18. Linux安装imagick扩展出现错误:configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
  19. 整数求和 Exercise07_21
  20. 自定义JS Map 函数

热门文章

  1. CLOUDSTACK FOR HYPER-V
  2. 可拖动jquery插件
  3. leetcode 【 Subsets 】python 实现
  4. Python2 HTMLTestRunner自动化测试报告美化
  5. 微信小程序简单的数据表格及查询功能
  6. C# 序列化和反序列化 详解
  7. 利用python爬取58同城简历数据
  8. [python][django学习篇][9]设计正在博客视图(3)
  9. javascript原生360 开机小动画
  10. vs编译生成之后报错