内存模型

Posted java_wxid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存模型相关的知识,希望对你有一定的参考价值。

文章目录

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

JDK 1.6:有永久代,静态变量存放在永久代上。
JDK 1.7:有永久代,但已经把字符串常量池、静态变量,存放在堆上。逐渐的减少永久代的使用。
JDK 1.8:无永久代,运行时常量池、类常量池,都保存在元数据区,也就是常说的元空间。但字符串常量池仍然存放在堆上。

Java虚拟机栈

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

堆和元空间

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

以上是关于内存模型的主要内容,如果未能解决你的问题,请参考以下文章

项目经理问我Java内存区域模型!急急急

JAVA内存模型(JMM简述)

Java分布式高并发JVM内存模型技术要点!

Java 内存模型(JMM),一看就懂 清晰明了

Java 内存模型(JMM),一看就懂 清晰明了

Java 内存模型(JMM),一看就懂 清晰明了