01 JVM的内存机制

问题:

JVM的内存机制是什么

答案:

JVM中的内存分为五个部分:
(1)方法区:存储加载的class字节码,通过该区域我们能寻址到类中的方法的入口。除此之外,方法区还包括运行时常量区和静态常量区。这个区域是所有线程共享的。
(2)堆:存储new出来的对象,垃圾回收器主要监控和回收的就是这块区域。在堆里面不断创建对象但是垃圾回收器不回收,就有可能造成OutOfMemoryError错误。这个区域也是线程共享的。
(3)虚拟机栈:存储所有被调用的java方法的上下文。在main方法里面调用test方法,则在虚拟机栈里面push进test方法上下文,调用完毕,则pop出test方法的上下文。倘若在main方法里面递归调用main方法,则虚拟机栈则会被消耗光资源,造成StackOverflowError错误。这个区域是线程隔离的,也就是说每个线程都有一个虚拟机栈。
(4)本地方法栈:本地方法栈与虚拟机栈类似,只不过本地方法栈中存储所有被调用的本地native方法的上下文。这个区域也是线程隔离的。
(5)程序计数器:存储着CPU下一条指令的地址,也就是说记录着现在程序执行到了哪里,执行到了那条语句,哪个指令。这个区域也是线程隔离的。
接下来,我们将分析一下下面的代码执行过程中JVM的内存变化。详情请点击程序执行与JVM内存的关系

public class Test
{
  public static void main(String args[])
  {
    User user = new User();
    user.id = 123;
    String name="ali";
    user.setName(name);
    User user1 = new User();
    user1.setName("zhangli");
  }
}
class User{
  private int id;
  private String name;
  public User(int id,String name)
  {
    this.id = id;
    this.name = name;
  }
  public User(){}

  public void setId(int id)
  {
    this.id = id;
  }
  public int getId()
  {
    return this.id;
  }
  public void setName(String name)
  {
    this.name = name;
  }
  public String getName()
  {
    return this.name;
  }
}
发布了358 篇原创文章 · 获赞 0 · 访问量 2776

猜你喜欢

转载自blog.csdn.net/langli204910/article/details/105082651