Java 内存分配-全面浅析2

2019-10-29  本文已影响0人  离线中__

文章引自:https://www.cnblogs.com/lipeineng/p/8358823.html

java的内存管理分为:

   1、堆内存; 2、栈内存; 3、方法区; 4、本地方法区

   Java栈内存以帧的形式存放本地方法的调用状态(包括方法调用的参数,局部变量,中间结果等)。每调用一个方法就将对应该方法的方法帧压入 Java 栈,成为当前方法帧。当调用结束(返回)时,就弹出该帧。
   编译器将源代码编译成字节码(.class)时, 就已经将各种类型的方法的局部变量, 操作数栈大小确定并放在字节码中,随着类一并装载入方法区。当调用方法时,通过访问方法区中的类的信息,得到局部变量以及操作数栈的大小。
   也就是说: 在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配。 当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量所分配的内存空间, 该内存空间可以立即被另作它用。

下面通过一个简单的代码示例,理解Java中,内存是怎么进行分配与管理的。示例如下:
public class JavaRamExplain {  
    public static void main(String[] args) {  
        Person.whatCountry();  
          
        Person sam = new Person("sam", 20);  
        sam.introduceSelf();  
    }  
}  
class Person {  
  
    private String name;  
    private int age;  
    public static String country = "china";  
  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    public void introduceSelf() {  
        System.out.println("My name's " + name + ",i'm " + age + " years old.");  
    }  
  
    public static void whatCountry() {  
        System.out.println("This people come from " + country);  
    }  
} 

当开始运行JavaRamExplain类时,JVM便会开始进行内存的分配管理工作。

图解过程为:

图片较大,可右击查看原图

可以看到到第八步工作结束后:

由图中也可以看到:

上一篇下一篇

猜你喜欢

热点阅读