Java内存区域与内存溢出异常

最近在看周志明著的《深入理解Java虚拟机》第二版,我认为这本书将Java程序运行过程中设计的各种知识都整合了起来,是一本java程序员的必读书目。下边是我整理的一些Java内存区域与内存溢出异常相关的内容:

  • 程序计数器:一块较小的内存空间,字节码解释器工作时通过改变计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖计数器来完成。每个线程都有自己的程序计数器,互不干扰。

  • Java虚拟机栈:和程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是方法执行时的内存模型。此地方说的是虚拟机栈中局部变量表部分,局部变量表在编译器存放各种基本数据类型、对象引用。局部变量表所需的内存空间是在编译期完成分配,方法在执行的不会改变大小。

  • 本地方法栈:和Java虚拟机栈相似,本地方法栈为使用到的Native方法服务。

  • Java堆:线程共享的内存区域,所有对象实例以及数组都要在堆上分配,但是随着JIT编译期的发展和逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象分配在堆上并不是那么绝对了。Java堆又被称为“GC堆”,由于现在收集器基本都采用分代收集算法,所以Java堆中还可细分为:新生代和老年代。

  • 方法区:线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。对于Hotspot虚拟机来说,很多人愿意把方法区称为“永久代”,本质上两者不是等价的,仅仅是因为Hotspot虚拟机的设计团队选择把GC分代收集扩展至方法区,或者说用永久代来实现方法区。对于其他虚拟机来说(BEA JRockit,IBM J9)是不存在永久代的概念的。对于Hotspot来说,这样会存在内存溢出的问题(-XX:MaxPremSize的上限问题),其它的虚拟机则不会有该问题,对于32位系统来说,只要不超过操作系统的4GB就不会有问题。最新版的JDK1.7已经将字符串常量池从永久代中移除了。

  • 运行时常量池:是方法区的一部分。用于存放编译器生成的各种字面量、符号引用和翻译出来的直接引用。String的 Intern是利用运行时常量池的动态特性最常用的。

  • 直接内存:并不是Java虚拟机运行时数据区的一部分,也不是java虚拟机规范中的定义的内存区域。但这部分内存也被频繁的使用,而且也可能导致 OutOfMemoryError异常。例如,Java中的NIO,引入了一种基于通道( Channel)和缓冲区(Buffer)的I/O方式,他可以使用Native函数库直接申请堆外内存,然后通过存储在Java堆中的一个DirectByteBuffer对象作为这块内存的引用进行操作。这样在一些场景中提高了效率,因为避免了在Java堆和Native堆中来回复制数据。

Java虚拟机运行时数据区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值