java常量池
❶ java中的几种常量池
字符串常量池:当类加载完成,在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中。
class文件常量池:用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。
运行时常量池:当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中。
❷ java中 关于常量池 栈内存 堆内存
java中空间分为3个,串池、堆、栈、其中串池是放字符串的,比如“1234”,堆是放对象的。栈是放变量的。
❸ Java 中的 常量共享池 什么意思
一直有个疑问,java中字符串池,String池,共享池是怎么回事?
好像知道什么意思,但具体又不太清楚,所以也一直没太关注。
从网上看了些资料,解释了下疑问。
在java的栈中,有共享池的概念,把一些常量会放到这个共享池中,包括字符串常量和基本类型常量。
共享的操作时在编译时 由编译器完成的,可以节省内存,并提高效率。
例如语句string str = "hello", 首先在栈中创建字符串引用变量str, 再看看栈中有没有“hello”,如果有就str直接指向它,没有就创建“hello”并放在栈中,然后指向它。
对于int之类的基本类型的变量也差不多都是这样的。
而对于 String str = new String("hello"),则是创建新的对象,并放在堆内存中。是在runtime的时候分配内存的。
这样做效率和节省内存方面不如String str = “hello”, 但是更灵活,如果编译时不知道要创建什么样的字符串,就
只能运行时创建了。
❹ JVM中常量池存放在哪里
java8之前: java8之后:元数据区 Metaspace 由于 PermGen 内存管理的效果远没有达到预期,所以JCP已经着手去除PermGen的工作。在JDK7中,字符串常量已经从永久代移除。现今 JDK8 中 PermGen 已经被彻底移除,取而代之的是metaspace数据区,使用native内存,申请和释放由虚拟机负责管理。 那么,JVM中常量池到底存放在哪里? Java6和6之前,常量池是存放在方法区(永久代)中的。 Java7,将常量池是存放到了堆中。 Java8之后,取消了整个永久代区域,取而代之的是元空间。 运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。❺ java常量池是什么
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
❻ Java运行时常量池是什么
运行时常量池是每个类常量池的运行时代表。它包含了类的运行时常量和静态方法。运行时常量池是方法区的一部分。