首页 > 分享 > Java内存区域

Java内存区域

最新推荐文章于 2023-04-27 20:27:51 发布

123 黑曼巴 于 2020-08-23 12:16:56 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

Java内存区域包括堆、方法区、程序计数器、Java虚拟机栈、本地方法栈。

堆是Java虚拟机管理的内存中最大的一块区域,它被所有线程共享,在虚拟机启动时自动创建。所有的对象实例以及数组都在堆上进行分配。Java堆可以是可扩展的,也可以是不可扩展的。当前主流的Java虚拟机都是按照可以扩展来实现的,可以通过jvm参数-Xmx(最大堆内存)与Xms(初始化堆内存)来设定,如果两个设置一样大小,则不可扩展,如果初始化堆比最大堆小,则可以扩展。如果可以扩展,但是没有足够堆内存分配给实例时,将无法再扩展,并且Java虚拟机将抛出 OutOfMemoryError异常

方法区

方法区内存被所有线程共享,用于存储已经被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
JDK1.7的HotSpot虚拟机已经把原本放在永久带的字符串常量池、静态变量等移除;到JDK1.8已经完全弃用了永久代的概念,改用元空间(Metaspace)来代替。

运行时常量池

运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的常量运行池中。运行时常量池会受到方法区内存的限制,当无法申请到内存时将抛出OutOfMemoryError异常。

程序计数器

各线程私有,是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖程序计数器来完成。

Java虚拟机栈

各线程私有。

本地方法栈

本地方法栈是为虚拟机使用到的本地方法服务,即native方法,各线程私有。在栈的深度溢出或者栈扩展失败时分别抛出StackOverflowError异常与OutOfMemoryError异常。

直接内存

直接内存并不是Java虚拟机的内存的一部分,而是直接使用native方法直接分配堆外内存,内存大小受到服务器物理内存限制。如NIO就是基于直接内存的实现。可以通过以下参数调整 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m,具体参考地址:https://www.jianshu.com/p/b448c21d2e71

相关知识

java之标示符、变量学习(一)
Java对象生命周期管理:从创建到垃圾回收的完整解析
【JAVA】Java基础—面向对象编程:类与对象
Java编程,揭秘那些鲜为人知的“花指令”:效率提升还是隐藏风险?
Java 并没有死!那么,Java这朵“永生花”是怎么永葆青春的呢?
JAVA毕设项目网上鲜花销售管理系统(java+VUE+Mybatis+Maven+Mysql)
eclipse 增加内存的方法、修改配置文件 内存优化
《JAVA语言程序设计》期末考试试题及答案
Java项目:163 基于SSM的汽车租赁管理系统
java网上花店鲜花商城鲜花销售管理系统设计与实现项目源代码下载javawebjspsshmysql

网址: Java内存区域 https://m.huajiangbk.com/newsview792823.html

所属分类:花卉
上一篇: 怎么向喜欢的人送花表白,送花表白
下一篇: C/C++中的段错误(Segme