zoukankan      html  css  js  c++  java
  • 深入理解Java虚拟机(一)、Java内存区域与内存溢出异常

    Java虚拟机所管理的内存包括以下几个运行时数据区: 

    程序计数器(PCR):

    1、是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器

    2、为线程私有

    3、执行Java方法有PCR,执行native方法时,PCR为空(Undefined)

    4、该内存区域不会出现OME(Out Of Memory Exception)

    Java虚拟机栈:

    1、各线程私有,生命周期与线程相同

    2、JVMS描述的是Java方法执行的内存模型,局部变量表,操作数栈

    3、局部变量表中存储了基本类型,对象,和返回地址类型,long和double类型占两个slot

    4、存在SOE(StackOverflowError)和OME

    本地方法栈:

    1、为虚拟机用到的本地方法服务

    2、虚拟机规范对本地方法栈无具体规定,具体的虚拟机可以自由实现规定

    3、有SOE和OME

    Java堆:

    1、内存最大的一块区域,所有线程共享,VM启动时创建,唯一目的:存放对象实例

    2、也成为GC堆,是垃圾收集器管理的主要区域

    3、GC堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可

    4、有OME

    方法区:

    1、所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据

    2、别名非堆,是堆的一个逻辑部分

    3、内存逻辑上连续即可,可以选择固定大小或可扩展,或不是想垃圾收集

    4、有OME

    运行时常量池:

    1、是方法区的一部分,存放类文件,常量池信息

    2、具有动态性,可以在运行期或编译期将常量放入池中

    3、有OME

    直接内存:

    1、是使用native函数库直接分配的堆外内存,java堆中的DBB(DirectByteBuff)对象作为这块内存的引用

    2、会受到本机内存限制

    3、有OME

  • 相关阅读:
    HDU 5336 The mook jong (DP)
    HDU 1686 Oulipo (KMP——统计模式串出现次数)
    hdu 1711Number Sequence (KMP——输出模式串第一次出现位置)
    POJ Borg Maze (BFS+最小生成树)
    POJ 2349 Arctic Network (最小生成树第K大(小)边)
    hdu 1712 ACboy needs your help (dp 分组背包)
    hdu 1181 变形课 (bfs)
    hdu 2069 Coin Change (dp 母函数 )
    hdu 1171 Big Event in HDU(dp 01背包 母函数)
    hdu 1398 Square Coins (母函数)
  • 原文地址:https://www.cnblogs.com/boucher/p/5909703.html
Copyright © 2011-2022 走看看