首页编程java编程java方法区存的是什么(Java方法区和堆分别储存什么)

java方法区存的是什么(Java方法区和堆分别储存什么)

编程之家2023-10-1285次浏览

大家好,今天小编来为大家解答java方法区存的是什么这个问题,Java方法区和堆分别储存什么很多人还不知道,现在让我们一起来看看吧!

java方法区存的是什么(Java方法区和堆分别储存什么)

Java方法区和堆分别储存什么

堆区:

1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

java方法区存的是什么(Java方法区和堆分别储存什么)

栈区:

1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

java方法区存的是什么(Java方法区和堆分别储存什么)

3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

方法区:

1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

JAVA中方法区是不是堆的一部分

方法区,又称永久代(Permanent Generation),常称为PermGen,位于非堆空间,又称非堆区(Non-Heap space)。

方法区是被所有线程共享。

所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。

简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。

静态变量+常量+类信息(构造方法/接口定义)+运行时常量池存在方法区中。

但是,实例变量存在堆内存中,和方法区无关。

以上,只是逻辑上的定义。在HotSpot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也是就说,方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法区的实现。

java方法区中包含哪些内容,常量池中包含哪些内容

方法区里存储着class文件的信息和动态常量池,class文件的信息包括类信息和静态常量池。可以将类的信息是对class文件内容的一个框架,里面具体的内容通过常量池来存储。

动态常量池里的内容除了是静态常量池里的内容外,还将静态常量池里的符号引用转变为直接引用,而且动态常量池里的内容是能动态添加的。例如调用String的intern方法就能将string的值添加到String常量池中,这里String常量池是包含在动态常量池里的,但在jdk1.8后,将String常量池放到了堆中。

JAVA中类中的方法存储在什么地方

类加载时方法信息保存在一块称为方法区的内存中,并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。

另参考(他人文章):

如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod();在传递给对象参数的时候,Java编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用在前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。

好了,文章到此结束,希望可以帮助到大家。

java中...是什么意思,java里的.的作用javafx 用什么开发(javafx是什么)