Java内存和垃圾回收的知识学习
来源:互联网 发布:java异步请求数据 编辑:程序博客网 时间:2024/05/17 12:48
Java内存和垃圾回收的知识学习
昨天看了Java内存和垃圾回收方面的知识,所以今天打算写博客记录一下昨天学的知识,同时也可以将所学的知识整理一下,形成一个体系结构。
Java内存分配方面
在Java虚拟机中,分配空间主要分为几个方面,程序计数器,虚拟机栈,本地方法栈,堆,方法区。程序计数器的主要功能是记录当前线程说执行的jvm的字节码的行数,所以说程序计数器是线程私有的.具体的知识我会在后面的博客进行讲解。
平时咱们在程序中New出来的对象一般都是在堆中来进行分配,一般来说,凡是new出来的对象,一般都是将其存储在堆中,还有数组。所以说,堆在jvm存储分配的空间是最大,垃圾回收主要回收堆中的内存。垃圾回收机制一般是由一条线程在后台运行,它会一直监控着堆中的数据。垃圾回收主要是通过有向图来进行回收的。具体信息是:首先根节点可以当做是当前的线程信息,每一个堆中的对象当做一个节点,如果该对象有一个引用,就会有一条边指向该对象,并且说明该对象是可达的。如果垃圾回收运行的时候,存在有对象没有引用(即不可达状态),那么垃圾回收机制就会回收该对象分配的内存。
下面来谈谈对象的在Java内存中的状态,可以分为:可达状态,可恢复状态,不可达状态。可达状态是堆中的对象存储其引用。可恢复状态是当堆中对象没有引用时,首先会进入可恢复状态。即不会立马回收该对象,如果对象在垃圾回收之前的方法”’finalize()”’,如果再该方法中,又重新为该对象分配了引用,垃圾回收机制就不会回收该对象。不可达状态实在垃圾机制运行时,不存在引用,即立马回收。
Java中的引用类型
Java中的引用类型可以分为四类:强引用、软引用、弱引用、虚引用。咱们平时new出来的对象基本上都是强引用。对象在堆中分配出空间,然后引用指向该对象。强引用指的对象肯定不会被垃圾回收机制回收。也就是说,如果一个对象存在强引用,那么垃圾回收线程肯定不会去回收该对象。软引用在系统内存足够的情况下,其实和强引用时一样的功能,都可以操作引用的对象.但是当系统内存不够时,系统会回收软引用指向的对象。弱引用则是当遇到垃圾回收线程运行时,都会被进行回收。不管系统内存是否充足。虚引用主要是用来跟踪对象垃圾回收时的状态信息。
0 0
- Java内存和垃圾回收的知识学习
- JAVA的内存和垃圾回收
- Java的内存和垃圾回收机制
- Java内存和垃圾回收
- Java的内存区域以及各种垃圾回收算法和垃圾回收器
- jvm关于内存管理和垃圾回收的学习总结
- Java的内存泄漏和垃圾回收机制 && 正则表达式
- JAVA的内存分配策略和自动垃圾回收机制
- JAVA的堆栈和内存、垃圾回收解说
- Java的内存泄漏和垃圾回收机制
- JAVA内存和垃圾回收的一些理解文章整理
- Java-JVM的内存管理和垃圾回收
- java垃圾回收的一些简单知识
- JVM学习内存管理和垃圾回收
- 学习总结--内存泄露和垃圾回收
- JVM学习内存管理和垃圾回收
- java垃圾回收和内存泄露
- Java内存分配和垃圾回收
- 使用db2获取某一行或者从N到M行结果
- python数据类型
- Java网络编程学习笔记(4)非阻塞通信
- 使用这些技巧,看看谷歌是否真的了解你?
- 【剑指offer系列】 顺时针打印矩阵___20
- Java内存和垃圾回收的知识学习
- Inception安装部署实现SQL自动审核与上线
- 小米Git
- 欢迎使用CSDN-markdown编辑器
- sqlite 操作二进制数据
- Bacula网络备份环境搭建
- PHP文件处理--写入文件
- 好玩的日期插件
- 深入浅出数据仓库中SQL性能优化之Hive篇