堆是Java代码可及的内存,留给开发人员使用的;非堆是JVM留给自己用的,包含方法区、JVM内部处理或优化所需的内存(如 JIT Compiler,Just-in-time Compiler,即时编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码。
编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显式操作方法。所以,Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。
protected void finalize() throws Throwable { }
// 申请一个图像对象
Image image=new Image(); // 创建Image对象
…
// 使用 image
…
// 使用完了image,将它设置为soft 引用类型,并且释放强引用;
SoftReference sr=new SoftReference(image);
image=null;
…
// 下次使用时
if (sr!=null)
image=sr.get();
else{
//由于GC由于低内存,已释放image,因此需要重新装载;
image=new Image(); //由于GC由于低内存,已释放image,因此需要重新装载;
sr=new SoftReference(image);
}
为你推荐以下文章
蚂蚁金服Java研发工程师的春招面试经历 | 双非大佬教你如何成为offer收割机
常见的java面试的基础问题(二) | 附赠程序员面试必看的经典图书
常见的java面试的基础问题(一) | 看看你会的有多少?