码迷,mamicode.com
首页 > 编程语言 > 详细

Java虚拟内存(栈、堆)

时间:2020-01-14 16:26:11      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:描述   优点   回收机制   速度慢   私有   调用   循环   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开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。

Java虚拟内存(栈、堆)

标签:描述   优点   回收机制   速度慢   私有   调用   循环   nbsp   线程创建   

原文地址:https://www.cnblogs.com/lanchengbao/p/12192410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!