java内存区域管理

JVM在执行Java程序时,将其管理的内存区域划分成若干个不同的数据区域

各个区域用途不同,有各自的创建和销毁时间;有些区域随着JVM的启动存在,而有些区域依赖用户线程的启动和结束而建立和销毁。

  • 程序计数器(线程隔离 / 线程私有)
  1. 定义当前线程所执行字节码的行号指示器。工作时,通过改变此计数器的值来改变选取下一条需要执行的字节码指令。
  2. 特点
  • 多线程执行时,为了线程切换后能恢复到正确的执行位置,每个线程需要一个独立的程序计数器,各线程技术器之间相互独立——“线程私有”。
  • 正在执行的是java方法时,计数器记录的是虚拟机字节码指令的地址;当执行native方法时,计数器为空;无OutOfMemoryError.

 

  • java虚拟机栈(线程隔离 / 线程私有)
  1. 定义:描述java方法执行时的内存模型——每个方法执行时都会创建一个栈帧,用于存储局部变量;是通常所说的栈内存

 

  • 本地方法栈(线程隔离 / 线程私有)
  1. 定义:与java虚拟机栈类似,但是针对native方法。

 

  •  java堆(所有线程共享)      
  1. 特点: 虚拟机启动时创建,唯一目的就是存放对象实例;由垃圾收集器管理,也称GC推。

 

  •  方法区(所有线程共享)
  1. 定义:用于存储类型信息,可以理解为类的描述信息(全限定名,访问修饰符,字段,方法等)。
  2. 线程安全:两个线程企图访问方法区中的同一个类时,只允许一个线程进行加载。
  3. 存放内容
  • 全限定名:类的全路径名
  • 父类全限定名
  • 类的类型
  • 访问修饰符
  • 常量池(字段(成员变量),方法信息,静态变量,类型引用(class))等
  1. 运行时常量池:方法区的一个部分;Class文件中保存了常量池,存放编译期生成的各种字面量和符号引用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值