标签:描述 优点 回收机制 速度慢 私有 调用 循环 nbsp 线程创建
一、java虚拟的内存可以分为几种
1. 第一种 栈(stack)
1.1 栈描述的是方法执行的内存模型,每个方法都被调用都会创建一个栈(存储局部变量、操作数、
方法出口等)
1.2 JVM为每一个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)
1.3 栈属于线程私有,不能实现线程间的共享!
1.4 栈的存储特点是“先进后出,后进先出”
1.5 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
2. 第二种 堆(heap)
2.1 堆用于存储创建好的对象和数组(数组也是对象)
2.2 JVM只有一个堆,被所有线程共享
2.3 堆是一个不连续的内存空间,分配灵活,速度慢!
3. 第三种 方法区(method area)
3.1 JVM只有一个方法区,被所有的线程共享!
3.2 方法区实际也是堆,只是用于存储类、常量相关的信息
3.3 用来存放程序中永远是不变或唯一的内容。(类 信息【Class对象】、静态变量、字符串常量等)
二、 垃圾回收原理和算法
垃圾回收过程
任何一种垃圾回收算法一般要做两件基本事情:
1. 发现无用的对象
2. 回收无用对象占用的内存空间。
垃圾回收机制保证可以将“无用的对象”进行回收。无用的对象指的就是没有任何变量引用该对象。Java的垃圾回收器通过相关算法发现无用对象,并进行清除和整理。
垃圾回收相关算法
1. 引用计数法
堆中每个对象都有一个引用计数。被引用一次,计数加1. 被引用变量值变为null,则计数减1,直到计数为0,则表示变成无用对象。优点是算法简单,缺点是“循环引用的无用对象”无法别识别。
2. 引用可达法(根搜索算法)
程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。
标签:描述 优点 回收机制 速度慢 私有 调用 循环 nbsp 线程创建
原文地址:https://www.cnblogs.com/lanchengbao/p/12192410.html