JVM的逻辑内存模型图

[逻辑内存模型图]

-----

JVM内部分区

其实JVM内部不仅仅只有栈和堆 
包括 程序计数器 、 Java 虚拟机栈 、本地方法栈、Java 堆、方法区等

1. 程序计数器

线程私有,较小的内存空间,如果线程正在执行的是一个Java 方法,这个计数器记录的是正在执行的虚拟机字节

码指令的地址;如果正在执行的是Natvie 方法,这个计数器值则为空(Undefined)。此

内存区域是唯一一个在Java 虚拟机规范中没有规定任何OutOfMemoryError 情况的区域。

2. Java 虚拟机栈(栈区) 
线程私有,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态

链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在

虚拟机栈中从入栈到出栈的过程。

3.本地方法栈 
与虚拟机栈所发挥的作用是非常相似的,区别不过是虚拟机栈为虚拟机执行Java 方法(也就是字节码)服务,
而本地方法栈则是为虚拟机使用到的Native 方法服务,有的虚拟机(譬如Sun HotSpot 虚拟机)直接就把本地方法栈和虚拟机栈合二为一。
与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError 和OutOfMemoryError

4.Java 堆(堆区) 
线程共享,此内存区域的唯一目的就是创建并存放对象实例,也是GC区。分代收集算法:内存区大概分为新生代,老年代,永久代。
新生代从Eden区创建,复制到Survivor区(2个 from 和 to)。 GC分为minor GC 和 Full GC ,
minor GC: Eden满了就触发minor GC,minorGC会将Eden区仍然存活的会复制到ToSurvivor
,FromSurvivor一部分复制到老年代,一部分复制到ToSurvivor,此时原Eden和From的数据清空,from和to互换,这样的过程直到To被填满,复制到老年代。
FullGC:(1)年老代内存不足;(2)持久代内存不足;(3)统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间(4)调用System.gc()方法的时候,

5. 方法区(类级/静态) 
线程共享,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
虽然Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它别名叫做Non-Heap(非堆)
即“永久代”,不进行GC,只是针对常量池的回收和对类型的卸载 
运行时常量池:是方法区的一部分,Class常量池存放编译期生成的各种字面量和符号引用,
运行时常量池相对于Class 文件常量池的另外一个重要特征是具备动态性,运行期间也可能将新的常量放入池中,这种特性被开发
人员利用得比较多的便是String 类的intern() 方法(这个方法会首先检查字符串池中是否有”ab”这个字符串,如果存在则返回这个字符串的引用,
否则就将这个字符串添加到字符串常量池中,然会返回这个字符串的引用,这可以实现字符串的"= ="比较。new String 不进入常量池,直接赋值会进入常量池)。

最新文章

  1. 什么是Node?Node环境配置
  2. LigerUI 表单和表格中的combobox如何初始化值
  3. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)
  4. SQL Server In-Memory OLTP 无损PPT分享
  5. 理解 Soap
  6. Sql中的Merge和output
  7. 用httpPost对JSON发送和接收
  8. POJ 2533
  9. 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
  10. B/S在北大青鸟-ASP.NET 总结
  11. vim note(3)
  12. 二、mongo数据库
  13. H5移动端开发入门知识以及CSS的单位汇总与用法
  14. MySQL错误:2003-Can't connect to MySQL server on 'localhost'(10061 "unknown error")
  15. HDU1060
  16. POJ 3713 Transferring Sylla (三联通分量)
  17. 【JavaScript】underscore
  18. 最小的K个数(python)
  19. eclipse-查看继承层次图/继承实现层次图
  20. hive数据类型

热门文章

  1. Nginx的proxy buffer参数总结
  2. 【zookeeper】linux中编写脚本批量启动zookeeper
  3. mysql FORMAT() 格式化后的数字运算出错
  4. Android笔记(六十二)网络框架volley
  5. 学习python的日常5
  6. centos7误删除python2.7导致的python和yum不可用处理
  7. CH6302 雨天的尾巴
  8. [Flutter] Create a Customer widget
  9. go同步互斥锁
  10. 通过类型断言获取error类型,获得更详细的信息