当前位置: 首页 > 编程笔记 >

基于jvm java内存区域的介绍

茹元魁
2023-03-14
本文向大家介绍基于jvm java内存区域的介绍,包括了基于jvm java内存区域的介绍的使用技巧和注意事项,需要的朋友参考一下
jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个 先上图一:

总的就是

java的内存模型

内存模型又分堆内存(heap)和方法区(有时也称为non-heap)和栈

堆又分新生代(Young)和老年代(old/Tenured)

新生代又分默认比例为8:1:1的eden空间、from survivor空间、to survivor空间

当进行垃圾回收时,eden、survivor from 存活得对象会复制到servivor to空间

接着from与to空间互换.(当from区的对象足够老时,即标记的次数达到老年级别,便到老年代去)

内存的大小设置参数可以如下一张图说明

-XMS:堆的最小空间

-XMX:堆的最大空间

-PermSize:方法区的最小空间

-MaxPermSize:方法区的最大空间

-Xss:每个线程的堆栈空间

-newSize:新生代最小空间

-maxNewSize:新生代最大空间

老年代内存可以通过设置堆的大写和新生代的大小来控制

老年代内存=堆内存-新生代内存

程序计数器

线程私有,控制着字节码所执行的行数.调用本地方法(native)时为空

当前线程所执行的字节码的行号指示器,字节码解释器就是在工作时通过改变计数器的行号来获获取要执行的字节码指令.调用本地方法(native)时计数器为空

虚拟机栈

线程私有,java执行方法的内存模型

每个方法执行的时候都会创建一个栈帧,用于存放局部变量、操作数栈、动态链接、方法出口等信息

局部变量表:基本数据类型、对象引用、long和double类型占两个局部变量空间

每调用一个方法,都会对参数进行压栈

本地方法栈

线程私有.调用native方法时

堆:

堆内存

线程共享,对象的html" target="_blank">实例以及数组都存储在这里

堆又分新生代、老年代

在分代收集算法中,新生代又分eden空间、from survitor空间 和to survitor空间).它们之间内存比例为8:1:1

方法区

线程共享

存放类的信息、常量、静态变量、即时编译后的代码

方法区下又有运行时常量池:存放编译期生成的字面量和符号引用

以上这篇基于jvm java内存区域的介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍介绍下 Java 内存区域(运行时数据区) ?相关面试题,主要包含被问及介绍下 Java 内存区域(运行时数据区) ?时的应答技巧和注意事项,需要的朋友参考一下 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK. 1.8 和之前的版本略有不同,下面会介绍到。 JDK 1.8 之前: JDK 1.8 : 线程私有的: 程序计数器 虚拟机栈

  • 一、Java内存区域 方法区(公有): 用户存储已被虚拟机加载的类信息,常量,静态常量,即时编译器编译后的代码等数据。异常状态 OutOfMemoryError 其中包含常量池:用户存放编译器生成的各种字面量和符号引用。 堆(公有): 是JVM所管理的内存中最大的一块。唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。异

  • 问题内容: 我已经阅读了很多有关Java内存区域的信息,但看起来只是一团糟。主要是由于引入了新区域而不是java8。现在有问题: java8 +中包括哪些区域? 其中的方法和变量存储之前java8和java8 +? 除了类元数据信息外,是否存储任何其他内容? 存储器区域的结构是否取决于的实现? 谢谢您的回答。 问题答案: 内存区域的结构是否取决于JVM的实现? 绝对。PermGen或Metaspa

  • 我在Kubernetes集群上运行了一个openjdk:8映像。我添加了内存HPA(水平Pod自动缩放),它可以很好地扩展,但由于JVM不会将内存从堆释放回操作系统,所以Pod不会缩小。以下是hpa。亚马尔 解决这个问题的一种方法是使用正确的GC并使其释放内存,但由于JVM被设计为不经常从堆中释放内存,因此这样做不是一个好主意。库伯内特斯有没有办法解决这个问题?就像不检查操作系统的内存使用情况一样

  • 一个更友好的域内基于角色的访问控制的API。 这个API是Management API的子集。 RBAC用户可以使用这个API来简化代码。 参考 全局变量 e 是 Enforcer 实例。GoNode.jsPHP.NETRust e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv") const

  • 我有一个有多个分离的圆形区域的噪声图像是模糊的。具有六个感兴趣区域(ROI)的这种图像的示例是: 在Matlab中使用和给定的阈值很容易用全局阈值分割图像。但是我想相对于每个ROI(而不是整个图像)的最大像素值设置一个固定阈值(例如54%),来分割每个ROI。 我有一组不同ROI大小和位置的图像,我需要基于区域阈值分割来分割它们,因此我也无法使用Matlab交互工具来选择它们。 谢谢