《深入理解Java虚拟机》学习小记一之自动内存管理机制(二)
1.概要2.判断对象是否存活的算法2.1引用计数算法2.2根搜索算法3.GC算法3.1标记-清除(Mark-Sweep)算法3.2复制(Copying)算法3.3标记-整理(Mark-Compact)算法3.4分代收集算法3.5几种算法的优缺点4.垃圾收集器5.垃圾收集器的参数总结 6.关于GC的几...
深入java虚拟机学习 -- 内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的。 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思了。下面让我们来详细介绍下这五部分; 运行时数据区 Java虚拟机在执行Java程序的过程中会把它...
《深入理解Java虚拟机》学习笔记
1 java虚拟机内存划分模型 JVM在执行Java程序时,会把它所管理的内存划分为若干个不同的数据区域。JVM与形式数据区域如下: 1.1 程序计数器 程序计数器(program counter register)是一块儿较小的内存空间,它记录的是当前线程所执行的字节码的地址。Java...
深入理解 Java 虚拟机之学习笔记(1)
本书结构: 从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译 讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因 分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎 讲解了...
深入理解java虚拟机学习笔记(一)
纲领 Java的运行时数据区为: A. 方法区 -----------(线程共有) B. 堆 -----------(线程共有) C. 虚拟机栈 -----------(线程私有) D. 本地方法栈---------...
深入理解 Java 虚拟机之学习笔记(2)
本节介绍 Java堆的OutOfMemoryError测试 Eclipse Memory Analyzer分析内存溢出 虚拟机栈和本地方法栈StackOverflowError测试 方法区和运行时常量池溢出 本机直接内存溢出 一、Java堆的OutOfMemoryError测...
深入理解 Java 虚拟机之学习笔记(3)
垃圾回收(Garbage Collection,GC ) ,GC的历史其实比Java久远,1960年诞生与MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收?...
《深入理解java虚拟机》之学习笔记(三)——java 判断对象是否可回收
java垃圾回收器在回收时首先要判断对象是否还存活,是否可回收。那么,如何判断一个对象是否可回收呢?本文就这一问题做一个简单的整理。 很容易想到的一个简单的实现方式是给对象添加一个引用计数器,每当有一个地方引用就加1,引用失效则减1;任何时刻计数器为零的对象就是不会再被使用的,内存自动回收时就可以对...
《深入理解java虚拟机》学习-第三章-垃圾收集器
1.GC需要完成的三件事情: ① 哪些内存需要回收? ② 什么时候回收? ③ 如何回收? 2.程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭,所以这几个区域不需要过多考虑回收问题,因为线程结束时,内存自然就跟着回收了,而java堆和方法去不同; 3.在堆里存放几乎java中所有对象实...
垃圾收集算法与内存分配策略--《深入理解Java虚拟机》学习笔记
垃圾收集算法与内存分配策略–《深入理解Java虚拟机》学习笔记一、对象存活算法判定1、何为引用 如果reference类型的数据中存储的数值代表另一块内存的起始地址,则称这块内存代表着一个引用;有一类对象,当内存空间还足够时,则能保留在内存之中,如果内存空间在进行垃圾收集后还是很紧张,则根据引用类型...
深入理解JAVA虚拟机学习笔记6——七种垃圾收集器介绍和对比
本来这一篇应该是和大家分享以下HotSpot的算法实现的,但是有部分内容存在一些疑问,还需进一步研究一下,今天就简单介绍一下几种不同的垃圾收集器。 开始之前有几点需要提前介绍一下。 第一点,书中提到了一个词,“Stop The World”——即当进行垃圾收集的时候,必须暂停其它所有的工作线程。 第...
《深入理解java虚拟机》学习笔记3——垃圾回收算法
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的...
《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一
Grabage Collection GC GC要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 内存运行时区域的各个部分中: 程序计数器、虚拟机栈、本地方法栈这3个区域随线程而生,随线程而灭。 栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作。 每一个...
深入理解java虚拟机学习笔记(二)垃圾回收策略
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略。 一、finailize()方法 ...
《深入理解Java虚拟机学习笔记之垃圾收集器与内存分配策略》
Java运行时内存区域分为5个部分,其中程序计数器、虚拟机栈、本地方法栈都是随线程而生,随线程而灭,所以这个3个区域不需要过多考虑回收内存的问题。而堆内存和方法区则不一样,一个接口中的多个实现类 需要的内存可能不一样一个方法中的多个分支需要的内存也不可能一样,只要在程序处于运行期间才能知道会创建...
深入理解Java虚拟机学习笔记-2.JVM垃圾回收
JVM垃圾回收 1.简介jvm要进行垃圾回收粗略分为两个步骤:找出需要清理的内存(无效的内存区域) , 清理无效的内存区域程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是...
JVM垃圾回收(深入理解Java虚拟机学习笔记)
什么是垃圾Java中那些不可达的对象就会变成垃圾。对象之间的引用可以抽象成树形结构,通过树根(GC Roots)作为起点,从这些树根往下搜索,搜索走过的链称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明这个对象为可回收的对象。可作为GC Roots的对象包括下面几种: 1.虚拟机...
《深入理解java虚拟机》学习-第一章-走进java
第一章:走进Java 1.java能够得到广泛认可的原因(优点) ① 摆脱硬件平台束缚,“一次编写,到处运行”; ② 提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题; ③ 实现了热点代码检测和运行时编译及优化,使得java应用能够随着时间增加而获得更高的性能; ④ 有...
深入理解JAVA虚拟机学习笔记13——字节码指令2(运算指令)
本篇继续字节码指令的学习,开始之前,先巩固一下基础知识,Java中基本数据类型的范围。 1. 整型: 1.1 byte:数据类型是8位、有符号的整数,取值范围-128~127; 1.2 short: 数据类型是 16 位、有符号的整数,取值范围-32768~32767; 1.3 int:数据类型是3...
Java虚拟机学习 - 类加载机制
类加载机制 JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparati...