java的内存分配:

java在运行时的内存结构分为:stack(栈内存),heap(堆内存),codesegment(方法区内存)。

1、stack(占内存)有局部变量,操作数,帧数据组成。

2、heap(堆内存)new创建的对象和数组。

3、codesegment(方法去内存)类的基本信息,类的详细信息。类的详细信息有有常量池,字段信息,方法信息,静态变量,classloader的引用和class的引用。

java 栈(stack)是java jvm决定程序如何执行,数据如何处理。局部变量区是一个以字节为单位的数组,每个数组元素对应一个局部变量的值,调用方法时,将方法的的局部变量组成一个数组,通过索引来访问,若方法为非静态的则加入指向这个方法对象的一个this,若方法为非静态的这没有这个this,因此对象没有办法访问静态的方法。操作数栈也是一个数组,但是通过栈操作来访问。帧数据区处理常量池解析,异常处理等。

java 堆(heap)是一个运行时的数据区,用来存储数据单元,存放通过New创建的的对象和数组

java codesegment(方法区)是对象分配的一个内存逻辑区,1,类的基本信息:包括:类的全名,该类的直接父类的全名,该类是接口还是普通类,类的访问修饰符。2,类的详细信息:常量池:在方法去中,每个类型都对应一个常量池,存放该类型所用到的所有常量,常量池中存储了诸如文字字符串、final变量值、类名和方法名常量。它们以数组形式通过索引被访问,是外部调用与类联系及类型对象的桥梁。

字段信息:字段信息存放类中声明的每一个字段的信息,包括字段的名、类型、修饰符。方法信息:类中声明的每一个方法的信息,包括方法名、返回值类型、参数类型、修饰符、异常、方法的字节码。