美文网首页
JAVA运行内存

JAVA运行内存

作者: 陈俊亙 | 来源:发表于2018-05-30 00:57 被阅读0次

    组成部分

    • 程序计数器
    • 虚拟机栈
    • 本地方法栈
    • 方法区

    前面三者为线程隔离的区域,后面两者为线程共享的区域

    程序计数器

    概述:较小的内存空间,当前线程执行字节码的行号指示器,每个线程之间相互独立
    注意:在执行JAVA方法时,计数器记录的是字节码指令地址;在执行native方法是,计数器值为空
    异常:唯一不会有OutOfMemoryError的区域

    虚拟机栈

    概述:JAVA方法(字节码)执行的内存模型,线程之间相互独立

    方法运行时会创建一个栈帧(方法运行的基本数据结构)存储局部变量表、操作数栈等信息。
    方法的调用到执行完成,对应着栈帧 入栈到出栈 的过程
    局部变量表存储内容:基本数据类型和对象引用(指向对象初始地址的引用指针)
    八大基本数据类型:byte、short、int、long、char、float、double、boolean
    局部变量空间在编译时大小就固定了,运行时不会改变大小
    64的long和double占用两个局部变量空间,其余都只占用1个空间

    异常:StackOverFlowError、OutOfMemoryError

    本地方法栈

    概述:基本等同于虚拟机栈,只是执行的是native方法,线程之间也是相互独立的
    异常:StackOverFlowError、OutOfMemoryError

    JAVA堆

    概述:管理内存中最大的一块,是被线程共享的区域,只要存放对象的实例。Java堆是垃圾收器的主要区域,又被称为GC堆。主要划分为新生代老年代
    配置:-Xmx 和 -Xms控制大小
    异常:OutOfMemoryError

    方法区

    概述:线程共享的区域,主要存储被加载的类信息、常量、静态变量、即时编译的代码。又被称为:非堆(Non-heap)。
    在HotSpot虚拟机上,被称为永久代。原因是垃圾收集行为较少,主要是常量池的回收和类型的卸载。
    配置:-XX:MaxPermSize
    异常:OutOfMemoryError

    相关文章

      网友评论

          本文标题:JAVA运行内存

          本文链接:https://www.haomeiwen.com/subject/gmrzjftx.html