内存

内存

1. 堆

  1. 堆中保存的内容:包含对象内的局部变量;

    当没有变量引用时,GC就会自动回收对象

2.栈

  1. 栈帧:

    每调用一个方法,jvm就会在栈中为方法创建一个空间,这个空间叫做栈帧;参数/局部变量等数据变量;

    方法执行完后栈帧消失

  2. 成员变量在对象中,对象被回收,成员变量失效;

    局部变量在方法中,方法执行完毕,局部变量失效;

3.方法区

在产生栈堆关系之前,会通过类加载器载入类文件的字节码信息,经过解析后类的信息装入方法区.类的信息包括成员变量和方法定义;

类名.class{
    成员变量1;成员变量2;
    方法名(){
    }
}

类中的成员变量和方法定义信息只保存一份;

4.事例

  1. 方法调用后栈帧就会消失

    public static void main(String[] args) {
    		Double price= 12.5;
    		test1("数学", price);//调用完test1方法之后,此栈帧消失
     		System.out.println(price);
    	 }
    	 public static void test(String aname,Double price) {
     		price = price+10;
    	 }
    
  2. 此时card为同一对象

    public static void main(String[] args) {
    	Integer age = 20;
    	Father father = new Father(age);
    	test2("代维",father);
    	System.out.println(father.age);
    }
    public static void test(String name,Father father) {
    	father.age+=20;
    }
    
  3. 图片
    在这里插入图片描述

5.内存溢出

  1. 原因:

    栈堆中数据过多

  2. 解决方法:

    建议GC加快回收(建议:不能提醒jvm不是强制)

    System.gc();
    
  3. 查看内存占用情况

    1. 获取Runtime对象

      Runtime runtime = Runtime.getRuntime();
      
    2. 获取jvm所占最大内存

      runtime.maxMemory()/1024/1024+"M"
      
    3. 当前jvm所占最大内存

      runtime.totalMemory()/1024/1024+"M"
      
    4. 剩余内存

      runtime.freeMemory()/1024/1024+"M"
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值