JVM之内存分区 有更新!

Java7之前的JVM内存分区结构

c644a172d0484bec8b28a4e00fd48cfb-image.png

共享区

  • 方法区:又称永久代PermGenNon-Heap,方法区存放的是类加载的类信息,常量,静态变量,即时编译后的代码等数据。虚拟机规范把他描述为是Heap的一个逻辑部分,但是他们之间是严格区分的,因此又叫Non-Heap。HotSpot将分代回收扩展至此区域,或者说用永久代来实现方法区,方便类JavaHeap的垃圾回收管理[主要是针对常量池的回收和类的卸载],因此这部分又被称为 永久代
  • 方法区中有一部分区域被称为运行时常量池,其中存储字面量符号引用.字面量又分为:文本字符串,final修饰的常量,基本数据类型的值,其他。。符号引用又分为:类和结构的完全限定名,字段名称和描述符,方法名称和描述符。

  • Heap堆区: Java 堆区是对象实例存放的区域。所有new出来的对象都会在堆区划分内存,尽管«深入理解Java虚拟机»书中说"在JIT和逃逸分析技术的逐渐成熟,栈上分配,标量替换优化技术将会导致一些微妙的变化。所有的对象堆上分配,已经显得不那么绝对了"。但是并不妨碍我们取总览JVM的分区结构。

私有区

  • Java VM Stack:Java虚拟机栈是线程的私有区域,他的生命周期跟线程同步,描述的是Java线程执行的内存模型,每个方法在执行的时候都会创建一个自己的栈帧。每个方法从调用到执行的过程代表了一个栈帧从VM stack入栈到出栈的过程。
  • Native Metod Stack:本地方法栈,为虚拟机使用到的Native方法服务,一般是一些底层的JVM实现和操作方法,类似底层调用。
  • 程序计数器:当前线程执行的字节码的行号指示器。字节码解释器通过改变他的值来获取需要执行的下一条指令。每一个线程都有独立的程序计数器,用于保证切换/故障恢复。

堆区与栈区

通常我们所说的堆就是Java Heap,栈区就是 Java VM Stack。而部分的虚拟机通常将VM Stack和Native Stack和为一体。那么简单来看,将整个JVM 内存划分为两部分也不为过。因为这也是我们最关注的部分,线程的私有部分涉及到并发安全和数据访问即内存模型。而堆区涉及到GC垃圾回收,这是个永远值得关注的部分,它关系到一个应用的安全和性能

Java7的JVM内存分区

在Java7中的HotSpot已经将原本属于方法区/永久代字符串常量池移出到【堆区或者本地内存,众说纷云】, ,因为动态产生类的很容易造成永久代的OOM,PermSize和MaxPermSize可以设置其大小,但是总会限制。在Java8中已经完全移除永久代从JVM内存中。

Java8的JVM内存分区

e3db86386a004c7aa1469fb4c414c5d0-image.png

Java8中的方法区/永久代已经被彻底移除了,这里面的类加载的数据也被移到了一个叫做元空间MetaSpace本地内存中,每一个类加载器的存储区域就是一个个元空间,加起来就是我们所说的元空间区域。关于元空间的详细介绍可以查看java永久代去哪了

内存Eorr

StackOverflowError:Vm Stack/Native Stack

  • 线程请求的虚拟机栈深度大于允许的深度,就会爆出此异常

OutOfMemoryError:Vm Stack/Native Stack/Heap/方法区

  • 大部分虚拟机都可以动态扩展栈深度,当扩展时无法申请到内存,也会爆出此Error.
  • 除了程序计数器之外其他区域分配不到内存就会爆出OutOfMemoryError内存溢出Error.

JVM内存参数配置

永久代:停止使用,但是有必要知道

  • -XX:MaxPermSize 用于设置永久代大小的最大值,
  • -XX:PermSize 用于设置永久代初始大小
$ java -XX:PermSize=128m -XX:MaxPermSize=256m MyApp

Heap堆:

  • -Xms或-XX:InitialHeapSize and 初始堆大小
  • -Xmx或-XX:MaxHeapSize 最大堆大小
$ java -Xms128m -Xmx2g MyApp
$ java -XX:InitialHeapSize=128m -XX:MaxHeapSize=2g MyApp

总结

Java的版本更替,导致内部的很多规范都发生了变化,其中一些细节的变化,查找了一些资料也并不是弄得很清楚,这其中包括,运行时常量池,和字符串常量池的具体变化,但是至少让我们JVM的分区有了大致的认识。关于堆区的划分,在垃圾回收中再继续说。

. - - —— ————THE END——— —— - - .

⚠求而不得,往往不求而得!
⚠此文章为原创作品,转载务必保留本文地址及原作者。

评论

发表评论

validate