# Java 方法区和常量池
在Java虚拟机(JVM)中,方法区和常量池是两个重要的概念。方法区是JVM中的一块内存区域,用于存储类的信息、常量、静态变量和编译后的代码等。常量池是方法区的一部分,用于存储字符串常量、类和接口的全限定名、字段和方法的符号引用等。
## 方法区的作用和特点
方法区是JVM中的重要内存区域之一,其主要作用是存储类的信息。在Java中,每个类都有一个对应的Clas            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-05 14:16:35
                            
                                126阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            【Java_基础】java中的常量池1.java常量池的介绍 java中的常量池,通常指的是运行时常量池,它是方法区的一部分,一个jvm实例只有一个运行常量池,各线程间共享该运行常量池。java常量池简介:java常量池中保存了一份在编译期间就已确定的数据。它里面包括final常量的值(包括成员常量、局部常量和引用常量)、以及对象字面量的值。在编译期间,每当给常量赋值它就会去检测常量池中是否存在该            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-15 06:44:28
                            
                                44阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Java常量池和方法区的实现
## 1. 简介
在Java程序中,常量池和方法区是两个重要的概念。常量池用于存储字符串常量、类名、方法名等常量信息,而方法区则用于存储类的方法信息、字段信息等。在本文中,我将向你介绍如何在Java中实现常量池和方法区。
## 2. 实现流程
下面是实现Java常量池和方法区的步骤:
| 步骤 | 描述 |
| ---- | ---- |
| 1. 创建            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-07 15:16:08
                            
                                51阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            **栈空间:**栈空间一般是拿来存储局部变量,对象的引用(一般是存储对象的地址值)**堆空间:**堆空间一般存储的是对象,即为new出来的东西,包含成员变量等,数组也存在于堆空间 jdk 1.7以后加入了字符串常量池 ,1.7以前字符串常量池再方法区中**方法区:**为static修饰的类,方法,变量,常量都在这;所以常量的存储在方法区,有个区域被称为常量池; 还有就是运行时常量池也在这个区域(所            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-29 14:51:28
                            
                                140阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,所管理的内存将会包括以下几个运行时数据区域: 方法区的定义:jdk8虚拟机规范中对方法区的定义: 方法区是各个线程共享的内存区域,它存储每个类的结构信息,例如运行时常量池,字段(通过引用常量池中的常量来描述)和方法等数据,以及方法和构造函数的代码,包括用于类和实例初始化以及接口初始化的特殊方法。其中灰色            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-03 21:46:21
                            
                                34阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            程序中存放数据的内存分为四块,另有一块存放代码。1. 方法区:存放全局变量和静态变量2.常量池:存放常量字符串3.栈:存放函数的参数值,局部变量的值4.堆:存放成员变量(实例变量),一般内存泄漏会发生堆:存放所有new 出来的对象栈:存放基本类型的变量数据和对象的引用,对象(new 出来的对象)本身并不存在栈中,而是存放在堆中或者常量池中(字符串常量对象)常量池:存放基本类型常量和字符串常量对于栈            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 16:29:30
                            
                                84阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            总共分为三种常量池 本文是对网上的资料做的总结 下面做区分
 Java 的 JVM 的内存可分为 3 个区:堆内存(heap)、栈内存(stack)和方法区(method)也叫静态存储区。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-22 22:23:43
                            
                                164阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1、方法区特征 • 同 Java 堆一样,方法区也是全局共享的一块内存区域 • 方法区的作用是存储 Java 类的结构信息,当我们创建对象实例后,对象的类型信息存储在方法堆之中,实例数据存放在堆中;实例数据指的是在 Java 中创建的各种实例对象以及它们的值,类型信息指的是定义在 Java 代码中的常量、静态变量、以及在类中声明的各种方法、方法字段等等;同时可能包括即时编译器编译后产生的代码数据。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-30 13:48:18
                            
                                80阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1:是什么     运⾏时常量池是⽅法区的⼀部分,Class⽂件除了有类的版本、字段、⽅法、接⼝等描述信息 外,还有⼀项信息是常量池,⽤于存放编译器⽣成的各种字⾯量和符号引⽤,这部分内容将 在类加载后进⼊⽅法区的运⾏时常量池中存放。 2:模拟常量池 程序运行的结果为 true,false,true,  第一个是true,原因是两个普通变量            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-11 08:40:49
                            
                                51阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前言一直以来,对 方法区(Method Area) 的认识比较模糊,所以就抽空结合 JVM规范 、书籍和博客 对其功能和作用进行了研究。定义方法区能干什么规范中指出,方法区 的作用在于存储每个类的结构信息,包括运行时常量池、成员变量、成员方法、构造器以及一些特殊方法。成员变量以及成员方法我们都很熟悉了,重点就来看一一下 运行时常量池 和 特殊方法。运行时常量是什么 根据 JVM规范,常量池在Jav            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-25 15:57:40
                            
                                56阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             方法区就用来存储了每一个类的结构信息,不同的虚拟机实现是不一样的,有些叫永久代,有些称为元空间 1、类型信息类型的全限定名超类的全限定名直接超接口的全限定名类型标志(该类是类类型还是接口类型)类的访问描述符(public、private、default、abstract、final、static)  2、类型常量池vm为每个已加载的类型都维护一个常量池。常            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-12 02:22:55
                            
                                70阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            文章目录前言正文全局字符串池(string pool也有叫做string literal pool)class 文件常量池(class constant pool)运行时常量池(runtime constant pool)三种常量池之间的关联总结参考链接 前言Java 的 JVM 的内存可分为 3 个区:堆内存(heap)、栈内存(stack)和方法区(method)也叫静态存储区。在学习的过程            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-14 19:31:41
                            
                                101阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)也叫静态存储区堆:用于存放在程序中new出来的对象,.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈:用于存放基本类型的数据变量和对象的引用,但对象本身不在栈中,如果是new出来的对象则存放在堆中,如果是字符串常量则放在常量池中。每个线程包含一个栈区,栈中只保            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-06 05:57:24
                            
                                33阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            最近一直被方法区里面存着什么东西困扰着? 1.方法区里存class文件信息和class文件常量池是个什么关系。 2.class文件常量池和运行时常量池是什么关系。 方法区存着类的信息,常量和静态变量,即类被编译后的数据。这个说法其实是没问题的,只是太笼统了。更加详细一点的说法是方法区里存放着类的版本            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-15 14:56:35
                            
                                840阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先,我们简单了解一下运行时数据区,这里是java虚拟机运行程序时的内存区域。有方法区,堆,虚拟机栈,本地方法栈,程序计数器。方法区和堆是线程共享的,其他三个是线程私有的。然后我们看线程共享的方法区,里面存储着类信息,常量,静态变量,即时编译器编译后的代码等数据。然后,运行时常量池,就在堆里面(jdk1.7前在方法区里面)。在class文件中就存有常量池的信息,运行时就把class文件里面的常理池            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-10 15:01:20
                            
                                162阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            参考资料:Java内存区域模型主要分为4部分1.方法区 2.本地方法栈 3.栈 4. 堆1.方法区也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-01 15:43:50
                            
                                73阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一个Java question,求输出结果public class IntegerTest {
	public static void main(String[] args) {
		objPoolTest();
	}
	public static void objPoolTest() {
		Integer i1 = 40;
		Integer i2 = 40;
		Integer i3 =            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-02 19:28:27
                            
                                30阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            理论   小菜先拙劣的表达一下jvm虚拟内存分布:程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。     本地方法栈是jvm调用操作系统方法所使用的栈。     虚拟机栈是jvm执行java代码所使用的栈。     方法区存放了一些常量、静态变量、类信息等,可            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-25 08:56:01
                            
                                103阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            首先,必须强调一点:String Pool不是在堆区,也不是在栈区,而是存在于方法区(Method Area)解析:String Pool是常量池(Constant Pool)中的一块。  我们知道,常量就是不可以再改变的值,给它建一个池子很明显是为了加快程序运行的速度;在一个程序中,常量和变量是相对存在的;变量因为可变性所以一般存在于栈中,而常量去作为一个特殊群体被存在在常量池中。  常量池(            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-12 22:57:01
                            
                                308阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在Java的内存分配中,总共3种常量池:在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代在JDK1.8 hotspot移除了永久代用元空间(Metaspace            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-14 13:31:18
                            
                                34阅读
                            
                                                                             
                 
                
                                
                    