zoukankan      html  css  js  c++  java
  • java内存区域

    java虚拟机运行时数据区域

    1.程序计数器

    程序计数器可以看成是当前线程的所执行的字节码的行号指示器,用来控制运行的顺序,存放的是虚拟机字节码指令的地址。每个线程会有独立的程序计数器,所以程序计数器是线程私有的。

    2.虚拟机栈

    虚拟机栈存放的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个方法从调用到执行结束,都对应了栈帧在虚拟机栈中的入栈和出栈。

    大家习惯称作的堆内存和栈内存,其中栈内存其实就是虚拟机栈的局部变量表。

    局部变量表:基本数据类型,引用类型,returnAddress类型。引用类型存放的是指针,地址。

    局部变量表所需的内存空间在进入方法前已经确定了,方法运行期间不会在进行改变。

    虚拟机栈是线程私有的。

    当请求的栈深度大于虚拟机所允许的深度抛出: StarkOverflowError

    如果虚拟机内存可以动态拓展,如果拓展时无法申请到足够的内存,就会抛出: OutOfMemoryError。

    3.本地方法栈

    本地方法栈和虚拟机栈基本一样,虚拟机栈为虚拟机执行java方法(字节码)服务,本地方法栈为虚拟机执行本地方法服务。

    4.Java堆

    对于大多数的应用来说,堆是java虚拟机管理的内存中最大的一块。堆是所有线程共享的,在虚拟机启动时创建。堆存在的唯一目的就是存放对象实例。

    如果堆中没有内存完成实例分配,并且堆无法再拓展,将会抛出OutOfMemoryError。

    5.方法区

    方法区用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。方法区也是线程共享的。

    方法区又被称为“永久代”,由于虚拟机对方法区管理比较松,甚至可以不进行垃圾回收,但这并不意味着数据进入方法区就永久存在。

    如果方法区没有足够内存,会抛出:OutOfMemoryError。

    6.运行时常量池

    运行时常量池是方法区的一部分,class文件中的常量池: 用于存放编译期间生成的各种字面量和符号引用。这部分内容被类加载之后存放在运行时常量池中。

  • 相关阅读:
    高仿爱鲜蜂购物应用源码
    控制ClistCtrl的滚动的位置
    VC保存当面某个区域的图片
    MFC 屏幕截图方法
    回调函数使用(三)
    回调函数使用方法二
    VS2010编译Boost 1.57 静态链接库
    Windows7+VS2010下OpenGL的环境配置
    CxImage图像库的使用 .
    VS2010+PCL配置
  • 原文地址:https://www.cnblogs.com/xwzp/p/7521748.html
Copyright © 2011-2022 走看看