Java内存简单分析

来源:互联网 发布:matlab智能算法目录 编辑:程序博客网 时间:2024/06/02 06:36

栈:自动分配连续的空间;后进先出;一般放置局部变量;

堆:不连续;放置new出的对象

方法区:位于堆之内;放置:类的信息(代码)、static变量和常量池(字符串常量)等;

程序执行顺序:

  1. 从main方法开始,如果一开始就是对象的生成,则先找生成对象的类,在方法区找,没有则加载类的信息,存放在方法区。有:代码(属性、方法)、static变量和常量池等;
  2. 生成的对象的引用存放在栈中(局部变量),比如People p1,p1存在栈中,实质是只想对象信息的地址;new People()的对象信息存在堆中,其中的常量值属性和方法是地址,指向方法区中的存放的常量值属性和方法;
  3. 对对象的操作是通过引用进行的,对对象属性的复制是通过操作堆中地址指向方法区的属性;
  4. 每个方法对应一个栈帧,比如传递形参,用完消失;
  5. 常量池具有共享功能;
  6. static变量和方法存放在方法区,单独成块,其中,static方法是一个地址,指向方法区中的代码区里的static静态方法;
  7. 静态方法里面不能存在非静态变量,因为非静态变量属性不存在方法区里,是在堆里
原创粉丝点击