Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们仍需要了解JVM垃圾回收机制,以便在Java程序运行时发生错误的时候可以快速定位,并解决. 内存模型图 线程共享区: 方法区(Method Area):线程共享,存储被JVM加载的类信息.常量.静态变量.编译器编译后的代码等数据. Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾…
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要慢慢褪去了,总觉得心里慌的一逼,这怎么行呢?!趁明天周末,在公司电脑上记录下这周的一些学习内容.近期在看一本很经典的java书籍:<深入理解java虚拟机 第二版>,几年前也翻过,但那时候功力不够,不太能看懂就没看了.现在回过头来看,发现确实写的很好,很多知识点都能理解了,而且讲的也很有深度,收获…
一 概述 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题.正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务. 二 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域. JDK 1.8…
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略.        一.finailize()方法               在介绍GC策略前,先介绍下GC中的finailize方法.当对象没有任何引用的时候,通常这个对象会被回收掉,但如果我们想在对象被回收前进行一些操作,比如关闭一些资源,或者让这个对象复活,不让他被回收怎么办?这时候就要用到finailize方法了…
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1 程序计数器 它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器. java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多…
Java内存区域 程序计数器 (Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成. 在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一个线程中的指令.因此每个线程都需要有一个独立的程序计数器.此类内存为"线程私有"的内存. 如…
写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收集有哪些算法,各自的特点? HotSpot为什么要分为新生代和老年代? 常见的垃圾回收器有那些? 介绍一下CMS,G1收集器. Minor Gc和Full GC 有什么不同呢? 名词解释: 一.新生代.老年代:    转自https://www.cnblogs.com/E…
八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和Java中的变量有所区别,它包括类字段.实例字段和构成数组对象的元素,但不包括局部变量和方法参数.     ---Java内存模型规定:         · 所有的变量都存储在主内存中:         · 每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副拷贝,线程对变…
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的Java虚拟机:         · Class文件格式:         · Java API类库:         · 来自商业机构或开源社区的第三方Java类库.     JDK,即Java开发工具包,包括Java程序设计语言.Java虚拟机.Java API类库,是用于支持Java程序开发的…
第三章 垃圾收集器与内存分配策略 概述 ​ 程序计数器.虚拟机栈.本地方法栈3个区随线程而生,随线程而灭.因此大体上可认为这几个区域的内存分配和回收都具备确定性.在方法/线程结束时,内存自然就跟着回收了.而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存. 引用计数算法 ​ 给对象中添加一个引用计数器,每当有一个地…