b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

JVM中内存通常划分为两个部分,分别为堆内存与栈内存

电脑杂谈  发布时间:2021-05-16 00:05:08  来源:网络整理

一个:JVM中的内存

JVM中的内存通常分为两部分,即堆内存和堆栈内存。堆栈内存主要由运行线程方法使用

存储本地临时变量和线程中的方法运行时所需的引用对象的地址。

JVM的所有对象信息都是

存储在堆内存中。与堆栈内存相比,堆内存可能要大得多,因此JVM始终会划分堆内存

不同的功能块实现了堆内存中对象的管理。

堆内存不足的最常见错误是OOM(OutOfMemoryError)

最常见的堆栈内存溢出错误是StackOverflowError。该程序具有递归调用时最容易发生

二:堆内存划分

在JDK7及其以前的JDK版本号中。堆内存通常分为三个区域苗圃内存(年轻

世代),长期记忆(旧世代),永久记忆(永久代为

VM Matedata),显示示例如下:

jvm堆内存_jvm堆内存_java中栈内存和堆内存

顶层是托儿所记忆。创建对象后,首先将其放置在托儿所的伊甸园

在存储中,假设生存期超过两个生存者,它将被转移到长期记忆(旧一代)

元数据信息(例如对象方法和变量)存储在永久存储器中。通过假设永久内存不足。我们

例如,您将得到以下错误:

java.lang.OutOfMemoryError:PermGen

在JDK8中,情况发生了重大变化,也就是说,在正常情况下,您不会收到此错误的原因

在JDK8中,元数据中的永久内存从堆内存移动到本机内存。

,例如,JDK8中的JVM堆内存结构如下:

通过这种方式,永久内存不再占用堆内存。通过主动自行扩展,可以避免JDK7和以前的版本号

常见的永久性内存错误(java.lang.OutOfMemoryError:PermGen),也许这是您的

将JDK升级到JDK8的原因之一。

当然,JDK8还提供了新的Matespace内存设置

大小参数。通过此参数,可以设置Matespace的内存大小,以便我们自己建立自己的基础

项目的实际情况,避免过多浪费本地内存,并实现有效利用。

-XX:MaxMetaspaceSize = 128m设置最大元存储空间为128M

注意:假设未设置JVM,它将根据某些策略自行主动添加本地元存储空间。

假设您设置的元存储空间太小,您的应用程序可能会出现以下错误:

java.lang.OutOfMemoryError:元数据空间

java 1. 8之前的内存区域分为方法区域,堆内存,虚拟机堆栈,本地方法堆栈和程序计数器。如下图所示:

jvm堆内存

方法区,就像Java堆一样,是每个线程共享的内存区。它用于存储虚拟机已加载的数据,例如类信息,常量,静态变量和由即时编译器编译的代码。尽管Java虚拟机规范将方法区域描述为堆的逻辑部分,但它具有一个称为“非堆”(non-heap)的别名,目的是将其与Java堆区分开。许喜欢将方法区域称为“永久生成”。由于jdk 1. 7已开始为“永久生成”计划做准备,因此在jdk 1. 7的HotSpot中,原先放置在方法区域中的静态变量,字符串常量池等已移至堆中记忆。

在jdk 1. 8中,永久代不再存在,并且存储的类信息,编译的代码数据等已移至元空间(MetaSpace)。元空间不在堆内存中,而是直接被占用的本地内存(NativeMemory)。

java中栈内存和堆内存_jvm堆内存_jvm堆内存

元空间的性质类似于永久代的性质,并且两者都是JVM规范中方法区域的实现。但是,元空间和永久生成之间的最大区别是元空间不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但是元空间的大小可以通过以下参数指定:

-XX:MetaspaceSize,初始空间大小,达到此值时,将触发垃圾回收以进行类型卸载,并且GC将调整该值:如果释放了大量空间,则应适当减小该值如果空间较小,则当空间不超过MaxMetaspaceSize时,适当增加该值。

-XX:MaxMetaspaceSize,最大空间,默认情况下没有限制。

除了上述两个指定的大小选项外,还有两个与GC相关的属性:

-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少了由分配的空间引起的垃圾回收

-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比减少到由自由空间引起的垃圾收集

注意:如果未设置JVM,则会根据特定策略自动增加本地元存储空间。

如果您设置的元存储空间太小,则您的应用程序可能会出现以下错误:

java.lang.OutOfMemoryError:元数据空间

在Java7之前,HotSpot虚拟机将GC世代集合扩展到方法区域,并使用永久生成来实现方法区域。该区域的内存恢复目标主要是用于恢复常量池和卸载类型。在Java 8中,没有永久的代。方法区域直接放置在未连接到堆的本地内存区域中。该区域称为元空间。

文字和符号引用存储在常量池中。

符号引用包括:1.类的完全限定名称,2.字段名称和属性,3.方法名称和属性。

在加载类之后,字符串池中的内容就完成了。验证之后,在准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的参考值存储在字符串池中(请记住:string存储在池中的是参考值,而不是特定实例对象。特定实例对象存储在堆中打开的空间中。在HotSpot VM中实现的字符串池功能是一个StringTable类,它是一个哈希表,用于存储对常驻字符串的引用(即,我们通常用双引号引起来的引用)(而不是常驻字符串本身,而是常驻字符串),也就是说,在此StringTable引用堆中的某些字符串实例之后,它们等同于被赋予“驻留字符串”的标识。在HotSpot VM的每个实例中,只有此StringTable的一个副本,该副本由所有类共享。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-375723-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...