您的位置:首页 > 编程语言 > Java开发

Java内存和垃圾回收的知识学习

2016-04-08 16:42 363 查看

Java内存和垃圾回收的知识学习

昨天看了Java内存和垃圾回收方面的知识,所以今天打算写博客记录一下昨天学的知识,同时也可以将所学的知识整理一下,形成一个体系结构。


Java内存分配方面

在Java虚拟机中,分配空间主要分为几个方面,程序计数器,虚拟机栈,本地方法栈,堆,方法区。程序计数器的主要功能是记录当前线程说执行的jvm的字节码的行数,所以说程序计数器是线程私有的.具体的知识我会在后面的博客进行讲解。

平时咱们在程序中New出来的对象一般都是在堆中来进行分配,一般来说,凡是new出来的对象,一般都是将其存储在堆中,还有数组。所以说,堆在jvm存储分配的空间是最大,垃圾回收主要回收堆中的内存。垃圾回收机制一般是由一条线程在后台运行,它会一直监控着堆中的数据。垃圾回收主要是通过有向图来进行回收的。具体信息是:首先根节点可以当做是当前的线程信息,每一个堆中的对象当做一个节点,如果该对象有一个引用,就会有一条边指向该对象,并且说明该对象是可达的。如果垃圾回收运行的时候,存在有对象没有引用(即不可达状态),那么垃圾回收机制就会回收该对象分配的内存。

下面来谈谈对象的在Java内存中的状态,可以分为:可达状态,可恢复状态,不可达状态。可达状态是堆中的对象存储其引用。可恢复状态是当堆中对象没有引用时,首先会进入可恢复状态。即不会立马回收该对象,如果对象在垃圾回收之前的方法”’finalize()”’,如果再该方法中,又重新为该对象分配了引用,垃圾回收机制就不会回收该对象。不可达状态实在垃圾机制运行时,不存在引用,即立马回收。


Java中的引用类型

Java中的引用类型可以分为四类:强引用、软引用、弱引用、虚引用。咱们平时new出来的对象基本上都是强引用。对象在堆中分配出空间,然后引用指向该对象。强引用指的对象肯定不会被垃圾回收机制回收。也就是说,如果一个对象存在强引用,那么垃圾回收线程肯定不会去回收该对象。软引用在系统内存足够的情况下,其实和强引用时一样的功能,都可以操作引用的对象.但是当系统内存不够时,系统会回收软引用指向的对象。弱引用则是当遇到垃圾回收线程运行时,都会被进行回收。不管系统内存是否充足。虚引用主要是用来跟踪对象垃圾回收时的状态信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: