当前位置: 首页 > 面试题库 >

Java 8中的Java内存区域

赏新知
2023-03-14
问题内容

我已经阅读了很多有关Java内存区域的信息,但看起来只是一团糟。主要是由于引入了新MetaSpace区域而不是PermGenjava8。现在有问题:

  1. heapjava8 +中包括哪些区域?
  2. 其中static的方法和变量存储之前java8和java8 +?
  3. MetaSpace除了类元数据信息外,是否存储任何其他内容?
  4. 存储器区域的结构是否取决于的实现JVM

谢谢您的回答。


问题答案:
  1. 内存区域的结构是否取决于JVM的实现?

绝对。PermGen或Metaspace只是特定JVM的实现细节。以下答案是有关HotSpot JVM(Java SE虚拟机的参考实现)的。

  1. java8 +中堆包括哪些区域?

由于上述原因,说“在JDK 8中”而不是“在Java 8中”会更正确。

Java Heap的结构取决于所选的GC算法。例如,使用并行GC和CMS,堆分为老一代和年轻一代,后者由伊甸园和两个幸存者空间组成。

G1堆分为相同大小的区域。Epsilon GC堆是单个整体区域。等等。

  1. 静态方法和变量在java8和java8 +之前存储的位置?

方法(静态和非静态)都驻留在JDK 8中的Metaspace或JDK 8之前的PermGen中。不确定“变量”是什么意思:字段值在Java
Heap中,而字段元数据(名称,类型,偏移量)在元空间中。

  1. 除了类元数据信息外,MetaSpace是否存储任何其他内容?

以下各项存储在Metaspace中:

  • 类(内部表示)
  • 符号(名称和签名)
  • 基本数组(例如,字段元数据表示为无符号短裤数组)
  • 方法及其字节码
  • 方法计数器
  • 常量池和CP缓存
  • 注解

所有这些都可以视为“类元数据”。



 类似资料:
  • 本文向大家介绍简述JAVA中堆内存与栈内存的区别,包括了简述JAVA中堆内存与栈内存的区别的使用技巧和注意事项,需要的朋友参考一下 Java把内存划分成两种:一种是栈内存,一种是堆内存。 一、栈内存       存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则。       栈内存在函数中定义的“一些基本类型的变量和对象的引用变量”都在函数的栈内存中分配。当在一段代码块定义一个变量时,

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

  • 本文向大家介绍基于jvm java内存区域的介绍,包括了基于jvm java内存区域的介绍的使用技巧和注意事项,需要的朋友参考一下 jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个 先上图一: 总的就是 java的内存模型 内存模型又分堆内存(heap)和方法区(有时也称为non-heap)和栈 堆又分新生代(Young)和老年

  • 本文向大家介绍Java中的堆栈和堆内存之间的区别,包括了Java中的堆栈和堆内存之间的区别的使用技巧和注意事项,需要的朋友参考一下 JVM将内存空间分为两部分,一个是堆栈,另一个是堆空间。堆栈空间主要用于存储方法执行的顺序和局部变量。 堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。  分配给堆的内存将一直存在,直到发生以下事件之一: 程序终止  无记忆  相反,分配给

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

  • 我想以秒为单位获取差异,以确定系统时区是在远程时区的前面还是后面。这里的远程时区值是从数据库中获取的“格林尼治标准时间”。它可能是“美国/东方”,我将其转换为“美国/New_York”。但是对于格林尼治标准时间,我得到了错误。 但它给出了以下错误, 如何解决此错误?用什么代替GMT??