jvm的内存结构

jvm的内存结构

1.jvm中的三块内存空间

方法区内存空间:存放代码块,存放常量和被static修饰的数据。而且我们编写出的.java文件编译生成的.class文件的内容必须放在内存中,jvm中对应的程序才能运行。

栈内存空间:栈是一种数据类型,在程序执行时,栈会分配一片空间让方法进栈,同时,方法中的局部变量也会随方法进栈。栈中方法遵循先进后出的规则,当方法被调用时,方法会压栈,而最先压栈的方法(main方法)最后弹栈,最后压栈的方法最先弹栈。弹栈后方法占用的内存空会被释放。

堆内存空间:堆也是一种数据类型,它存放所有new出来的对象,并通过this建立起与栈的联系,栈可以通过this来访问堆。

2.栈的内存图

class BirthDate {
     private int day;
      private int month;
      private int year;    
     public BirthDate1(int d, int m, int y) {
          day = d; 
          month = m; 
          year = y;
      }
 }
 
 public class Test{
     public static void main(String args[]){
         int date = 9;
         Test test = new Test();      
         test.change(date); 
         BirthDate d1= new BirthDate1(7,7,1970);       
     }

     public void change(int i){
      i = 1234;
     }
 }

在这里插入图片描述

注意:关于递归,能用for或者while解决尽量不要递归,因为栈空间有限,而递归会不断进栈,导致栈溢出,就算是有出口的递归也会占用大量栈空间,也可能导致危险。

3.关于堆空间的GC回收机制

1.没有引用指向的对象会被回收,finallast()方法会在对象在销毁之前最后确认一遍。引用计数法,确定是否回收的算法

2.当堆中的对象太多的话,GC仍然在工作,GC会先移除弱引用和虚引用,且GC只在堆中出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值