JVM-运行时数据区域

Java内存区域详解
本文深入解析Java虚拟机的六大内存区域:程序计数器、Java虚拟机栈、Java堆、方法区、本地方法栈和直接内存。探讨了各区域的作用、特性及可能引发的异常,如OOM错误。

1,  程序计数器

    它可看作当期那线程所执行的字节码的行号指示器。每个线程都有自己独立的程序计数器,被称为线程私有。

  如果执行的时Java的Native方法, 计数器值为空。 程序计数器是虚拟机中唯一一个没有规定OOM异常的区域。

2. Java虚拟机栈

  Java虚拟机栈也是线程私有的。 每个方法在执行的同时会创建一个栈帧用来存储局部变量表,操作数栈,动态链接,方法出口信息。虚拟机栈会抛出StackOverFlowError 和OOM异常

3 Java堆 

  存储在创建的对象,所有的对象都在这里分配内存,也是垃圾回收的主要区域。 所以么,堆是线程之间共享的区域。在垃圾收集的过程中一般是采用不同类型使用不同种类的垃圾回收算法。在堆区分为两部分一部分是新生代,一部分是老年代。堆中的内存没有完成实例分配,并且堆也无法扩展,就会抛出OOM异常。

4 方法区

存放已经被加载的类的信息,常量,静态变量,即时编译器编译之后的代码,各个线程之间共享,跟堆一样。但是如果方法区无法满足内存的分配,就会抛出OOM异常

5 本地方法区

  保存native方法中的一些常量

6 运行时常量池:

运行时常量池是方法区的一部分。class文件中除了一些基本的类信息比如字段,方法,接口这些信息以外还有常量池。

常量池是用于编译器生成的各种字面量和符号引用。(虽然不大懂)

7  直接内存

不是虚拟机运行时数据区的一部分,也不是虚拟机定义的内存区域。不过因为它经常使用,而且会引起OOM异常。

总结一下吧:

会引起OOM异常的区域: 大概就是除了程序计数器之外。

线程私有的区域:虚拟机栈,程序计数器

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值