荣新IT培训中心
全国咨询热线:400-1335-066
您现在的位置:首页>行业新闻 > 正文

java内存划分必会知识

时间:2018-01-08 10:22:06 来源:荣新IT教育培训 作者:荣新科技
Java这几年很是火热,这也是跟其作为一门语言的特殊性有很大的关系,今天给大家分享的是关于Java内存划分的这样一个知识,希望对大家有所帮助。

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程序员来说,简单导致内存溢出等问题的发生。

 
文章源自荣新科技官网:www.vfast.com.cn欢迎访问,转载需注明出处