一、楼主要明白空间确定(只知道空间大小)和使用(内存空间被占用了)的区别。这里变量定义完肯定是能确定需要分配的空间大小了,但只有程序被加载时确定的空间才会被使用(如果是类,类被加载进方法区时变量空间被使用;如果是方法内部局部变量,那么当执行方法时被分配Java栈帧,此时变量空间被使用)。 注:类和方法中的局部变量(基本数据类型或对象引用)都是静态内存分配【可参考《深入分析javaweb技术内幕》第8章jvm内存分配策略】,所以当Java文件被编译完,空间大小就确定了。 二、谁分配的。jvm的所有内存(方法区,栈,堆等)是操作系统一开始给jvm分配的。而后主动权交给jvm,程序中的变量空间由jvm分配。 注:绝大部分是jvm分配的,也有特例,比如说nio中的allocateDirect()。
62,612
社区成员
307,332
社区内容
加载中
试试用AI创作助手写篇文章吧