Java内存空间的分配与回收
来源:互联网 发布:最小生成树prim算法 编辑:程序博客网 时间:2024/04/30 00:22
Java中内存分为堆内存和栈内存:
栈:存放简单数据类型变量(基本类型的变量和对象的引用变量:值和变量名都存在栈中),存放引用数据的变量名以及它所指向的实例的首地址
当一段代码中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域时,Java会自动释放掉为该变量所分配的内存空间
堆:存放引用数据类型的实例,即用来存放由new创建的数组和对象,运行到它们作用范围之外,数组和对象所占据的内存空间也不会被释放
只有数组和对象没有被引用变量指向的时候,才会变为垃圾,但仍然占据内存空间,在随后的一个不确定的时间被垃圾回收器释放掉
Java垃圾回收
在堆内存中分配的内存,由Java虚拟机的自动垃圾回收器进行管理,它是通过一个后台线程GC进行垃圾回收,当虚拟机判定内存不够用时,会中断代码的运行,此时GC进行垃圾回收
缺点:不能精确的回收内存
java.lang.System.gc();
上面代码会建议系统回收内存,但系统不一定回应,会先查看内存是否够用,够用不做处理,不够用才会进行垃圾回收
引用变量
引用变量是普通的变量,定义时在栈中分配,在程序运行到其作用域外被释放,它相当于为数组或对象取一个名称,以后的程序中可以直接通过引用变量来访问堆中的数组或对象
内存中什么算是垃圾?
不再被引用的对象(局部变量,没有指针指向的)
Java中变量在内存中的分配
类变量(Static修饰的变量):在程序加载系统的同时,为它在堆中开辟内存,堆中内存的地址存放于栈,便于高速访问,静态变量生命周期持续到整个系统关闭
实例变量:在Java中使用关键字new时,系统在堆中开辟的空间不一定是连续的;实例变量的生命周期为它的引用丢失后,会被GC列入可回收垃圾,但不是立刻释放内存
局部变量:声明在某方法或某代码块内,执行到它的时候在栈中开辟内存,一旦脱离作用域,内存立即被释放
- Java内存空间的分配与回收
- Java内存空间的分配、回收
- PGA内存空间的分配与回收
- 内存空间的回收和分配
- UGA由哪几部分组成和PGA上内存空间的分配与回收的方式
- JAVA 内存的分配与回收
- JAVA与JAVASCRIPT数组内存空间分配区别
- java堆栈与String分配内存空间
- Java中引用与内存空间分配
- java 变量 分配内存空间的一道题
- Java中String的内存空间分配
- 内存空间与分配
- 内存空间与分配
- java内存分配与回收
- Java内存回收与分配
- java 内存分配与回收
- 程序内存空间的分配
- Linux内存空间的分配
- Hive SQL 使用时的注意事项和一些踩过的坑
- iOS引入第三方库姿势
- xcode中找不到 libxml2.dylib的解决办法
- c#关于错误调试(监控验证错误)EntityValidationErrors
- javase day03
- Java内存空间的分配与回收
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- MFC通过类向导删除控件
- VSCode Git
- spark ml 聚类源码笔记二
- HashMap与ConcurrentHashMap的区别
- [Linux命令]--rmdir
- Ubuntu14.04+cuda6.5+opencv2.4.9+caffe配置记录
- eclipse使用maven插件更换maven仓库位置