A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  Java这几年很是火热,这也是跟其作为一门语言的特殊性有很大的关系,今天给大家分享的是关于Java内存划分的这样一个知识,希望对大家有所帮助。
  JVM内存的区分
  JVM的内存能够区分为以下几个首要部分:
  Program Counter Register,程序计数器,线程私有,是一块较小的内存空间,能够理解为当时线程执行字节码的行号指示器。
  Method Area,办法区,由各线程同享,用于加载类信息,常量,静态变量等数据。在HotSpot虚拟机的完结中,称这部分内存为Permanent Generation(永久代),这使得虚拟机能够像办理堆内存一样对这部分内存进行办理,能够通过参数-XX:MaxPermSize指定永久代的上限。而在其他虚拟机完结中并未运用永久代来完结办法区。当办法区无法满意内存分配需求时,便会抛出OutOfMemoryError。
  Java Heap,堆,线程同享,对大部分使用来说,这是JVM种最大的一块内存区域。JVM标准规则:一切的目标实例和数组都要在堆上分配。
  堆是内存收回的主战场,因而由称为Garbage Collected Heap(GC堆),在分代搜集战略下。堆能够进一步区分为新生代和老时代,更详尽的:
  Eden区,目标第一次创立时,从Eden区拓荒空间
  Survivor区,当Eden区不足以进行下次内存分配时,JVM触发一次GC,通过GC但未被收回的目标,被搬运到Survivor区。Survivor分为From,To两部分,屡次内存收回时未被收回的目标在这两块区域中来回搬运。
  Old区,当通过必定次数的GC后仍未被收回的目标,JVM将其搬运到老时代区
  4. JVM Stack,JAVA虚拟机栈,线程私有,其生命周期与对应的线程相同。当每个办法执行时,均会创立一个栈帧(Stack Frame)用于存储局部变量表,操作数栈,动态链接,办法出口等信息。每个办法的执行和完结,便对应着Stack Frame在虚拟机栈中的出栈和入栈的进程。一般意义上粗糙地将JVM内存区分为堆和栈,其中的栈便指的是JVM Stack.
  5. Native Method Stack,本地办法栈,与JVM Stack类似,本地办法栈对应的是Native办法的执行办理。
  此外,程序运转所需求的内存拓荒在JVM的内存空间中,也能够直接请求体系内存(Directive Memory),可是直接请求的体系内存不受JVM的废物收回办理,其开释由体系层面操控,因而关于不重视内存收回的JAVA程序员来说,简单导致内存溢出等问题的发生。

20180108111207224.jpg (8.86 KB, 下载次数: 9)

20180108111207224.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马