一.JVM的分区:   1.程序计数器(私有) 程序计数器是一块较小的内存分区,你可以把它看做当前线程所执行的字节码的指示器. 在虚拟机的概念模型里,字节码解释器工作时,就是通过改变计数器的值来选择下一条需要执行的字节码指令. 程序技术器为线程私有,每个线程都有它们各自的程序计数器,这样再多线程的情况下,线程之间的来回切换,也能正确找到上次切换时执行的位置. 如果线程正在执行的是一个Java方法,那么程序计数器记录的是当前线程正在执行的字节码指令的地址:如果线程正在执行的是一个native方法,…
本文整理自周志明老师的<深入理解Java虚拟机-JVM高级特性与最佳实践>第3版的第二章和第三章. 加上了一些网上拼拼凑凑的图片,个人认为很多博客复制来复制去,最后的东西都看不懂,所以从书里码了一下知识点,也用作自己记忆. 一.一个命令 上面的结果显示了 jvm 的模式: Client VM(-client),为在客户端环境中减少启动时间而优化: Server VM(-server),为在服务器环境中最大化程序执行速度而设计. 在文件路径:jdk-11.0.7+10\lib 下面可以更改 jv…
参考:http://blog.csdn.net/chenleixing/article/details/44227327/ 1.  在IE地址栏中输入:http://localhost/test/init1.jsp,执行一次,我们可以在内存视图中看到cn.test.TestBean对象被创建了10000次: 2.标记现在的状态,然后再执行init1.jsp和,init2.jsp可以让我们找到哪些类在调用后没有被释放(很重要!!!) 查看哪些类被发生了变化: 红色的变成是发生变化的对象及其数量.…
2. 垃圾收集器与内存分配策略 垃圾收集(Garbage Collection, GC)是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利.理解GC,对于理解JVM和Java语言有着非常重要的作用.并且当我们需要排查各种内存溢出.内存泄漏问题时,当垃圾收集称为系统达到更高并发量的瓶颈时,只有深入理解GC和内存分配,才能对这些"自动化"的技术实施必要的监控和调节. GC主要需…
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 垃圾收集器 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现.不同的虚拟机会有不同的垃圾收集器的实现,我们主要讨论的是默认的HotSpot虚拟机,这个虚拟机包含的垃圾收集器如下图: 如上图所示,一共有7种垃圾收集器,如果两个垃圾收集器之间有双箭头连线,则两个垃圾收集器可搭配使用.上面是新生代的收集器,下面是老年代的收集器.每个垃圾收集器都有各自适合的使用场景. Serial 收…
Java中几乎所有的对象实例都存放在堆中,在垃圾收集器对堆内存进行回收前,第一件事情就是要确定哪些对象还“存活”,哪些对象已经“死去”(即不可能再通过任何途径被使用). 引用计数算法 首先需要声明,至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存. 什么是引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1:当引用失效时,计数器值减1.任何时刻计数器值为0的对象就是不可能再被使用的.那为什么主流的Java虚拟机里面都没有选用这种算法呢?其中最主要的原因是它很…
[概述] 在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还 “存活” 着,哪些已经 “死去”(即不可能再被任何途径使用的对象). [引用计数算法(Reference Counting)] 算法逻辑是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1:当引用失效时,计数器就减 1:任何时刻计数器为 0 的对象就是不可能再被使用的. 客观地讲,引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一…
一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1,没有就-1,但是没有办法解决循环引用的问题,JVM不采用此类回收法 2.枚举根节点可达性分析(GC Root) 它必须是一组活跃的引用 思路:通过一系列名为GC Roots的对象作为起始点,从这个被称为GC Root的对象开始向下进行搜索,如果一个对象达到GC Roots 没有任何的引用链相连时,…
一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的. 二.垃圾收集器(garbage collector (GC)) 是什么? GC其实是一种自…
1.介绍垃圾收集器 垃圾收集器(Garbage Collection,GC)就是用于回收方法区和堆区,其他程序计数器.虚拟机栈.本地方法栈这3个区域都是随线程而生,随线程而灭,栈中的栈帧会随着方法的进入和退出而有条不紊地执行着出栈和入栈操作.每一个栈帧中分配多少内存在类结构确定下来时就是已知的,因此这几个区域的内存分配和回收都是具备确定性,所以这3个区域不需要考虑回收,因为方法结束或线程结束时,内存自然就跟着回收了.而Java堆和方法区就不同,一个接口中的多个实现类需要的内存可能不一样,一个方法…