JVM入门(三)——JVM运行时内存

在java虚拟机规范中定了java的内存结构包括两部分:第一是随着虚拟机启动而创建,随着虚拟机退出而销毁,供所有Java程序共享,另一部分是与java线程一一对应,随着线程的开始和结束而创建和销毁。

JVM入门(三)——JVM运行时内存

JVM运行时内存结构

以上是Java虚拟机规范,不同的虚拟机实现会各有不同,大部分会遵守规范,下面介绍一下使用比较广泛的虚拟机Hotspot虚拟机,对照上面规范,其中与规范不同的是对方法区的实现原理。在jdk1.8之前,方法区是叫永久区(PermGen),永久区在JVM的管理之下,但是到了jdk1.8之后,使用了元数据区(Metaspace)替代了永久区,并且Metaspace也从JVM中移出到了系统内存中,当用户如果不指定Metaspace大小,那么默认就使用全部系统内存。

还有一个概念交java常量池:

java常量池分为:静态常量池和动态常量池。

静态常量池:存在于class文件中,比如经常使用的javap -verbose中,常量池如下:

JVM入门(三)——JVM运行时内存

常量池

在class文件中常量池名称是Constant Pool。

运行时常量池:就是在class文件被加载进了内存之后,常量池被转移到了方法区中,通常说的常量池指的是运行时常量池。静态常量池存在于java.class文件中。动态常量池是在java.class文件加载到虚拟机时创建的。jdk从1.7之后,运行时常量池已经从永久区转义到了java堆中,在jdk1.8中,运行时常量池也不在Metaspace中在堆中。

posted @ 2021-10-11 11:31  指尖上的代码go  阅读(114)  评论(0)    收藏  举报