java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java内存区域管理

Java内存区域管理详解

作者:小二上酒8

这篇文章主要介绍了Java内存区域管理详解,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

1 关于自动内存管理

2 运行时数据区域

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间。

Java虚拟机所管理的内存 包括以下几个运行时数据区域:

2.1 程序计数器

2.2 虚拟机栈

2.2.1 局部变量表

JDK8之前,对jvm内存的认知只停留在:堆内存(Heap)和栈内存(Stack),而“栈”通常就是指这里讲的虚拟机栈,或者更多的情况下只是指虚拟机栈中局部变量表部分。

关于栈的内存数据分析,在后续章节中会有更深入分析,在本节中这里仅引入概念。

2.2.2 操作数栈

关于方法调用时的进栈跟出栈的原理,在《深入理解计算机系统》系列笔记的后续章节中会进行总结。

2.3 本地方法栈

2.4 堆

2.5 方法区

2.5.1 运行时常量池

3 直接内存

在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区 (Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的 DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了 在Java堆和Native堆中来回复制数据。
显然,本机直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,则肯定还是会受到 本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务 器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx等参数信息,但经常忽略掉直接内存,使得 各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现 OutOfMemoryError异常。

4 总结

Java内存区域及其数据类别概览:

到此这篇关于Java内存区域管理详解的文章就介绍到这了,更多相关Java内存区域管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文