0
点赞
收藏
分享

微信扫一扫

【内存模型】


【内存模型】_静态变量


文章目录

  • ​​JDK1.6、JDK1.7、JDK1.8 内存模型演变​​
  • ​​Java虚拟机栈​​
  • ​​堆和元空间​​

JDK1.6、JDK1.7、JDK1.8 内存模型演变

JDK 1.6:有永久代,静态变量存放在永久代上。

JDK 1.7:有永久代,但已经把字符串常量池、静态变量,存放在堆上。逐渐的减少永久代的使用。

JDK 1.8:无永久代,运行时常量池、类常量池,都保存在元数据区,也就是常说的元空间。但字符串常量池仍然存放在堆上。

【内存模型】_java_02

Java虚拟机栈

每一个方法在执行的同时,都会创建出一个栈帧,用于存放局部变量表、操作数栈、动态链接、方法出口、线程等信息。方法从调用到执行完成,都对应着栈帧从虚拟机中入栈和出栈的过程。最终,栈帧会随着方法的创建到结束而销毁。

【内存模型】_静态变量_03

堆和元空间

在 JDK 1.8 之后就不在堆上分配方法区了,元空间从虚拟机Java堆中转移到本地内存,默认情况下,元空间的大小仅受本地内存的限制,说白了也就是以后不会因为永久代空间不够而抛出OOM异常出现了。jdk1.8以前版本的 class和JAR包数据存储在 PermGen下面 ,PermGen 大小是固定的,而且项目之间无法共用,公有的 class,所以比较容易出现OOM异常。

【内存模型】_开发语言_04



举报

相关推荐

0 条评论