Java虚拟机中的内存概况

首先要说明一下,爪哇与Ç等语言在内存管理方面,最大的特点是Java的程序员将内存管理的权利交给了的Java虚拟机。经常有人把爪哇内存分为栈(栈)和堆(堆) ,这种分法比较粗糙,Java的内存区域的划分实际上远比这复杂。这种划分方法流行只能说明大多数程序员最关注的,与内存分配关系最密切的内存区就是这两块。先说一下的Java中内存的大致分区:线程共享的有:方法区,堆线程私有的有:虚拟机栈,本地方法栈,计数器位程序本地方法有:执行引擎,库本地接口接下来分别介绍一下上述内存区域:1。程序计数器:①目的是为了在多线程中,线程切换后能恢复到正确的执行位置,每条线程都需要一个程序计数器.②程序计数器是一块较小的内存空间,被称为线程私有内存,可以看做是当前线程所执行的字节码的行号指示器。2.Java虚拟机栈:①方法 栈后,每个方法会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。②局部变量表存放了在编译期可知的基本数据类型,对象引用。③Java虚拟机栈中的两个异常:a。如果线程请求深度大于JVM所允许的深度,将抛出:StackOverflowError.b 。如果无法申请到足够的内存,则抛出:OutOfMemoryError.3。本地方法栈:①虚拟机栈为Java方法服务,本地方法栈为使用本地方法服务.②本地方法栈中的两个异常(同Java虚拟机栈中的两个异常一样):

a.如果线程请求深度大于JVM所允许的深度,将抛出:StackOverflowError。
b.如果无法申请到足够的内存,则抛出:OutOfMemoryError。

4.Java堆:
①Java堆是共享区,也是Java虚拟机中所管理的内存最大的一块,几乎所有的对象实例都在这里分配内存。
②Java堆是垃圾收集器管理的主要区域。
③如果在堆中没有内存完成实例的分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError。

5.方法区:
①方法区用来存储类信息、常量、静态变量、即时编译器编译后的代码。
②在方法区中,垃圾回收效果比较差。
③当内存不足时会抛出OutOfMemoryError。

6.运行时常量池:
①在jdk1.7之前,常量池是在方法区中的,但是在jdk1.7中,将常量池移到了堆中,而在jdk1.8中移除了整个永久代,取而代之的是一个叫元空间(Metaspace)的区域。
②常量池用于存放编译期生成的各种字面量和符号引用。但是JVM并没有对常量池做任何的细节规范要求。
③会出现OutOfMemoryError:PermGen space。

7.直接内存:
①直接内存会显著提高性能,因为它避免了Java堆与Nativ堆中来回复制数据。
②该区域内存会受到总内存的限制。
③当内存不足时会抛出OutOfMemoryError。

你可能感兴趣的:(Java虚拟机中的内存概况)