Java的内存存储区域划分

本文深入解析了Java虚拟机(JVM)中的关键内存区域,包括方法区、常量池、堆和栈的功能及作用,通过具体代码示例展示了不同类型的变量如何在这些区域中分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jvm(java虚拟机)中的几个比较重要的内存区域(Java采用动态内存分配方式)。

    方法区:又叫静态区,跟堆一样,被所有的线程共享。用于存储虚拟机已经加载的类信息、常量、静态变量和即时编译器编译后的方法代码。包含所有的class和static变量

    常量池:是方法区的一部分,主要用来存放常量类中的符号引用等信息。

    堆:线程共享的区域,存放对象实例,堆中不存放基本类型和对象引用。堆是垃圾收集器管理的主要区域。

    栈:栈是存放线程调用方法时存储局部变量表,操作,方法出口等与方法执行相关的信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。

    即时编译器(JIT compiler,just-in-time compiler)是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。

AppMain.java
 public   class  AppMain   //运行时, jvm 把Appmain的信息都放入方法区
{
public   static   void  main(String[] args)  //main 方法本身放入方法区。
{
Sample test1 = new  Sample( " 测试1 " );   //test1是引用,所以放到栈区里, Sample是自定义对象应该放到堆里面
Sample test2 = new  Sample( " 测试2 " );
test1.printName();
test2.printName();
}
} 
Sample.java
 public   class  Sample        //运行时, jvm 把appmain的信息都放入方法区
{
/** 范例名称 */
private  name;      //new Sample实例后, name 引用放入栈区里,  name 对象放入堆里
/** 构造方法 */
public  Sample(String name)
{
this .name = name;
}
/** 输出 */
public   void  printName()   //print方法本身放入 方法区里。
{
System.out.println(name);
}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值