zoukankan      html  css  js  c++  java
  • Java内存区域与内存溢出异常 -- 运行时数据区域

    程序计数器

    • 是一块较小的内存空间,取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都是依赖这个计数器完成
    • 每条线程都有一个独立的程序计数器,各线程计数器互不影响,独立存储,这类内存区域称为"线程私有"内存

    JAVA虚拟机栈

    • 线程私有,生命周期与线程相同
    • 基本数据类型,boolean、byte、char、short、int、float、long、double
    • 对象引用,reference类型,returnAddres类型(指向了一条字节码指令的地址)
    • 64位的long和double类型的数据会占用2个局部变量空间(Slot)

    本地方法栈

    • 虚拟机栈是为虚拟机执行java方法服务
    • 本地方法栈为虚拟机使用的Native方法服务

    Java堆

    • 线程共享的一块内存
    • 垃圾收集器管理的主要区域,也称为"GC堆"(Garbage Colected Heap)
    • Java堆物理上可以不连续,逻辑上是连续的即可

    方法区

    • 与java堆一样,各个线程共享的内存区域,又称为Non-Heap(非堆)

    运行时常量池(Runtime Constant Pool)

    • 方法区的一部分
    • Class常量池存放编译期生成的各种字面量和符号引用
    • 运行时常量池相对于Class常量池另一个重要特征是具备动态性

    直接内存

    • 不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域
    • JDK1.4中引入 NIO(New Input/Output类),引入了一种基于通道(Channel)与缓冲区(Buffer)的IO方式
    • NIO可以使用Native函数库直接分配堆外内存,然后通过Java堆中的DirectByteBuffer对象作为这块内存的引用
    • 本机直接内存的分配不会受到Java堆的大小限制
  • 相关阅读:
    POJ-2478 Farey Sequence(欧拉函数)
    BZOJ-1103: [POI2007]大都市meg(树状数组)
    NOIP2016模拟 星际争霸(二分)
    HDU-1222 Wolf and Rabbit (欧几里得定理)
    POJ-2689 Prime Distance(线性筛法)
    FZU-2134 上车(树状数组)
    FZU-2236 第十四个目标(树状数组)
    2016年11月12日00:14:27
    FZU-1921 栀子花开(线段树)
    BZOJ3132 上帝造题的七分钟
  • 原文地址:https://www.cnblogs.com/YC-L/p/13159583.html
Copyright © 2011-2022 走看看