JVM总结-运行时数据区域

Jvm运行时的数据区域

在这里插入图片描述
PC register(程序计数器)

所执行编码的行号指示器,指到哪一行既执行哪一行的代码,线程私有的

方法区 :

  1. 存放类的信息
  2. 常量
  3. 变量
  4. 线程共享
  5. JIT编译器编译后的代码数据

什么是JIT 即时编译器(Just in time)?简单来说,Java程序最初是通过解释器翻译字节码(.class),然后在把它们编译成相应的机器码来运行。后来发现有一些代码会执行很多次(称为Hot spot code 热点代码),于是乎把这个代码直接编译成机器码来加快运行速度,完成这个任务的既为即时编译器。

  1. 又叫“永久区”,被GC覆盖
  2. -XX:MaxPermSize?M:调整内存最大值
  3. 运行时常量池

用于存放编译期生成的各种字面量和符号引用;
动态性:运行期间可将新的常量放入池中,如String.intern();

  1. OutOfMemoryError

java虚拟机栈

  1. 存放方法栈,基本单位 栈帧,一个栈帧对应一个方法
  2. 栈帧里存放:局部变量(int,long,float,double,char,boolean,byte,short 和 reference(对象引用)),操作数栈,方法出口,动态链接

在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类
的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。

  1. 线程私有
  2. 如果线程请求的栈深度找过虚拟机允许的深度,会报StackOverFloorError
  3. 动态扩展时无法申请到足够的内存,会报OutOfMemoryError
  4. -Xss:调整栈的最大深度(分配给栈的内存)
    引用块内容

java堆

  1. 存放对象实例
  2. 线程共享
  3. GC的主要区域
  4. 内存不够时会报OutOfMemoryError
  5. -Xmx?M分配给堆的最大内存,-Xms?M分配给堆的最小内存

本地方法栈

存放native的方法,和虚拟机栈差不多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值