zoukankan      html  css  js  c++  java
  • JVM运行时数据区

    1程序计数器(Program Counter Register)是一块较小的内存空间,在线程启动时创建,线程私有。可以看做是当前线程所执行的字节码的行号指示器。

    如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Natvie方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

    2虚拟机栈(Stack):线程私有,生命周期与线程相同;虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

    如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemoryError异常。

    (虚拟机栈为虚拟机执行java方法服务,而本地方法栈为虚拟机使用到的Native方法服务,HotSpot虚拟机直接将本地方法栈和虚拟机栈合二为一)

    3(Heap):在虚拟机启动时创建,所有线程共享。唯一的目的就是存放对象实例,几乎所有的对象实例及数组都要在堆上分配。(由-Xmx-Xms控制堆大小),如果堆中没有内存完成实例分配,并且无法再扩展将抛出OutOfMemoryErroy异常。

    4方法区(Method Area),所有线程共享,用于存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。当方法去无法满足内存分配需求是将抛出OutOfMemoryErroy异常。

  • 相关阅读:
    Dr.Watson
    得到当前操作系统的版本的
    屏蔽回车关闭对话框事件
    一个发邮件的类(用CDO实现)
    怎样配置SQL Server发送电子邮件
    无进程DLL木马的又一开发思路与实现
    Write AutoUpdating Apps with .NET and the Background Intelligent Transfer Service API
    WINDOWS编程入门一个初级问题的分析
    智能客户端技术总结(一)
    【.NET】C#.NET ADO.NET数据访问模型概述
  • 原文地址:https://www.cnblogs.com/liangzh/p/2571077.html
Copyright © 2011-2022 走看看