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

    运行时数据区域

    1、栈 :存放值

    “线程私有”且生命周期与线程相同。

    每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

     

    2、Java堆:存放对象

    是虚拟机所管理的内存中最大的一块,被所有线程共享的一块区域,在虚拟机启动时创建,唯一目的是存放对象实例。

    Java堆是垃圾收集器管理的内存区域。

    Java堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续。

    3、方法区

    与Java堆相似,是线程共享的内存区域,不过是用于存储被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

    方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

    4、程序计数器 :存放位置

    Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定是时刻,一个处理器(对于多核处理器来说都是一个内核)都只会执行一条线程中的指令。

    所以为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,这类内存区域称为”线程私有内存“。

    5、本地方法栈

    与虚拟机栈所发挥的作用是相似的,区别是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则是为虚拟机使用到本地(Native)方法服务。

    例子:

    变量a和s的都是对对象的引用,它们在栈里开辟了空间存变量引用对象的地址。当执行完毕之后,栈遵循先进后出原则自动删除a、s、x。但是堆里面的String和A此时不会被清理,因为不知道是否还会被其他变量引用,清理堆要用到垃圾回收机制(GC)。

  • 相关阅读:
    WPF FAQ (from Syncfusion)
    父窗口与子窗口的层次关系
    [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
    【讨论】不得不重视的问题:信息太多!信息太杂!
    javaScript系列 [08]javaScript和JSON (进阶)
    javaScript系列 [11]Canvas绘图(路径)
    javaScript系列 [10]Canvas绘图(基础)
    Hexo + Github搭建个人博客
    javaScript系列 [07]日期类型和计时器
    javaScript系列 [09]javaScript和JSON (拓展)
  • 原文地址:https://www.cnblogs.com/codercql/p/13435653.html
Copyright © 2011-2022 走看看