• Java内存区域


    运行时数据区域

    1、栈 :存放值

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

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

     

    2、Java堆:存放对象

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

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

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

    3、方法区

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

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

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

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

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

    5、本地方法栈

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

    例子:

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

  • 相关阅读:
    配置Mysql远程访问
    mysql Access denied for user root@localhost错误处理备忘
    MsSql判断表是否有自增标识
    .net用NPOI生成Word表格
    TensorFlow-卷积
    Java中int与Integer的区别
    由经纬度坐标得到腾讯地图的瓦片/切片行列号
    vs code上配置Scala
    VMware虚拟机上配置CentOS联网
    使用PuTTy在CentOS下安装web.py与简单的文件传输
  • 原文地址:https://www.cnblogs.com/codercql/p/13435653.html
Copyright © 2020-2023  润新知