Java内存机制

Java 内存机制

学习Java内存机制

基本类型 VS 引用类型

  1. 基本类型,它的值就是一个数字,一个字符或一个布尔值。java中有四类八种:
    四类:1,整型 2,浮点型 3,字符型4,逻辑型
    八种:byte,short,char,int,long,float,double,boolean
  2. 引用类型:是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。1

堆和栈 2

Java中的内存分为堆和栈。
栈:
1. 基本类型的变量和对象或者数组的引用变量会被存放在栈里,
2. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
3. 优势是存取速度快,存在栈中的数据可以共享
4. 缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

堆:
1. 堆内存用来存放由new创建的对象和数组。
2. 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
3. Java的堆是一个运行时数据区,堆是由垃圾回收来负责的
4. 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,
5. 缺点是,由于要在运行时动态分配内存,存取速度较慢。

因其各自的优势,栈被用来执行程序,堆被用来存放对象。
与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

总结

一张图总结下以上说的内容:
Java内存机制

应用

  1. C/C++的函数中返回一个数组(局部变量)的指针是会造成错误的,Java中为什么就能返回一个局部变量表示的数组呢? 代码注释中给了一种解释3,还有一种解释是该java程序是通过new来创建数组的,在C++中如果也通过new的方式来创建数组的话,也是可以返回数组指针的。4
private static int[] Create_Array(int len){
    // array放在堆中 在 java 里,由于是进行引用传递,他会在每一次对象赋值的时候进行引用计数,
    // 如果计数不为0,就不会回收局部变量,那么也就不会造成消失的问题 也就是当没有引用指向它的时候,
    // 垃圾收集器会在适当的时候 把他清除。以上就是JAVA运行机制中的一部分(垃圾收集)
    int[] array = new int[len];

    // 生成随机数
    for(int i = 0; i < len; i ++){
        array[i] = (int)(Math.random() * 100);
    }
    return array;
}
  1. 待续

  1. java中的引用类型和值类型的区别 https://juejin.im/post/59fd383a51882561a3264e4d
  2. Java内存机制,内存地址 http://www.cnblogs.com/IT-Monkey/p/3640596.html
  3. Java和C的区别:关于调用函数返回局部变量 https://bbs.csdn.net/topics/390901375
  4. 【C++基础之三】函数中局部变量的返回 https://blog.csdn.net/jackystudio/article/details/11523353
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值