![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
代码学习
代码
展开
-
深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成。与C语言不同,Java开发者不需要自己编写代码实现垃圾回收。这是Java深受大家欢迎的众多特性之一,能够帮助程序员更好地编写Java程序。 下面四篇教程是了解Java 垃圾回收(...转载 2019-03-20 09:44:31 · 123 阅读 · 0 评论 -
CMS收集器和G1收集器的区别
CMS收集器和G1收集器的区别 区别一: 使用范围不一样 CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用 区别二: Stop-to-World的时间 CMS收集器以最小的停顿时间为目标的收集器。 G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型) 区别三: 垃圾碎片 CMS收集器是使用...原创 2019-09-25 14:00:11 · 540 阅读 · 0 评论 -
OOM
堆OOM 直接内存OOM 过多线程导致的OOM 永久(Pern)溢出 GC效率低下引起的OOM String常量池因其的OOM https://www.cnblogs.com/htkj/p/10932489.html转载 2019-09-18 16:15:05 · 426 阅读 · 0 评论 -
内存泄露和内存溢出的区别 (概念区别 产生原因区别 及解决办法) 个人整理
内存泄露和内存溢出的区别 概念区别 内存溢出 : out of memory 指程序在申请内存时,没有足够的内存空间供其使用,出现out fo memory 比如申请一个integer 但给它存了long才能存下的数那就是内存溢出 内存泄露 : memory leak 指程序在申请内存后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的结果很严重,无论多少内存,迟早会被占光...转载 2019-09-02 16:23:13 · 216 阅读 · 0 评论 -
如何确定java内存泄露的位置
为什么会发生内存泄漏 Java如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题。 编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足...转载 2019-09-02 10:36:20 · 721 阅读 · 0 评论 -
类加载过程
类加载过程:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析 加载 类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口 验证 确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求...转载 2019-07-01 10:38:56 · 106 阅读 · 0 评论 -
Java对象创建过程
①类加载检查: 虚拟机遇到一条 new 指令时,在常量池中查看是否有new的参数对应类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程 ②分配内存: 新生对象分配内存。对象所需的内存大小在类加载完成后便可确定 分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择哪种分配方式由 Java 堆是否规整决定,而Java堆是否规整又...原创 2019-07-01 09:46:07 · 237 阅读 · 0 评论 -
如何判断一个类是无用的类?
方法区主要回收的是无用的类,那么如何判断一个类是无用的类的呢? 判定一个常量是否是“废弃常量”比较简单,而要判定一个类是否是“无用的类”的条件则相对苛刻许多。类需要同时满足下面3个条件才能算是 “无用的类” : 该类所有的实例都已经被回收,也就是 Java 堆中不存在该类的任何实例。 加载该类的 ClassLoader 已经被回收。 该类对应的 java.lang.Class 对象没有在任何地方...原创 2019-07-01 09:24:45 · 1186 阅读 · 0 评论 -
垃圾回收器
以上是 HotSpot 虚拟机中的 7 个垃圾收集器,连线表示垃圾收集器可以配合使用。 单线程与多线程:单线程指的是垃圾收集器只使用一个线程,而多线程使用多个线程; 串行与并行:串行指的是垃圾收集器与用户程序交替执行,这意味着在执行垃圾收集的时候需要停顿用户程序;并行指的是垃圾收集器和用户程序同时执行。除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行。 G1垃圾回收器 ...原创 2019-06-30 21:45:29 · 106 阅读 · 0 评论 -
常见的垃圾回收算法
1、标记清除法 方法:标记阶段:首先将需要进行回收的内存进行标记,清除阶段:将标记的对象进行清除 缺点:碎片化比较多,无法给大的对象分配内存;常常效率较低 2、复制算法 方法:将内存分为相等的两块,每次只使用一块内存,将这一块内存中存活的对象复制到另一块内存中,将使用过的内存进行清理; 缺点:虽然效率和碎片化问题解决了,但是当出现更多的对象存活时,复制的效率就会降低; 3、标记整理法 方法:将...转载 2019-06-30 21:37:38 · 497 阅读 · 1 评论 -
对象的引用
对象的引用 通过对如何判断一个对象是够应该被回收知道,可达性分析和程序计数法都是需要判断该对象是否被引用,但是对于不同的引用,回收的情况也不尽相同 1、强引用 被强引用关联的对象不会被回收。 使用 new 一个新对象的方式来创建强引用。 Object obj = new Object(); 2 、软引用 被软引用关联的对象只有在内存不够的情况下才会被回收。 使用 SoftReference 类来...原创 2019-06-30 21:31:53 · 338 阅读 · 0 评论 -
如何判断对象是否死亡
怎么判断一个对象是否应该被回收? 主要的方法分为两种:引用计数算法和可达性分析算法,目前常用的就是可达性分析算法; 程序计数算法 对一个对象添加一个引用的计数器,当该对象被引用依次那么计数器+1,如果引用被释放,那么计数器-1,这样根据对象最终引用次数为0时,将该对象回收; 缺点:当两个对象互相的引用,引用计数器就无法得到为0,那么也就无将对象就行回收; 可达性分析算法 首先找到一个GC ro...原创 2019-06-30 21:27:27 · 640 阅读 · 0 评论 -
类加载器和双亲委派模型
应用程序是由三种类加载器互相配合从而实现类加载,除此之外还可以加入自己定义的类加载器。 下图展示了类加载器之间的层次关系,称为双亲委派模型(Parents Delegation Model)。该模型要求除了顶层的启动类加载器外,其它的类加载器都要有自己的父类加载器。这里的父子关系一般通过组合关系(Composition)来实现,而不是继承关系(Inheritance)。 工作过程 一个类加载...原创 2019-05-20 21:57:03 · 181 阅读 · 0 评论 -
类加载机制
类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。 类的生命周期 包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) 类的加载过程 包含了加载、验证、准备...原创 2019-05-20 21:53:46 · 156 阅读 · 0 评论 -
Minor GC 和 Full GC,垃圾回收
Minor GC 和 Full GC Minor GC :新生代中的对象存活时间很短,所以Minor GC 回收比较的频繁,执行的速度也是比较的块 Full GC:老年代的中的对象存活时间比较长,发生垃圾回收的几率比较的少,执行的速度比较的长 内存分配策略 对象优先在 Eden 分配 大多数情况下,对象在新生代 Eden 上分配,当 Eden 空间不够时,发起 Minor GC。 大对...原创 2019-05-20 21:44:12 · 594 阅读 · 0 评论 -
JVM思维导图
哪些区域需要垃圾回收? 从JVM运行数据区域划分可以看到,内存的划分集中在两块,线程私有的内存的生命周期是和内存的周期相同,随着线程的结束内存既然也就得到释放; 所以内存垃圾回收机制主要集中的区域就是线程共享区域:堆和方法区 怎么判断一个对象是否应该被回收? 主要的方法分为两种:引用计数算法和可达性分析算法,目前常用的就是可达性分析算法; 程序计数算法 对一个对象添加一个引用的计数器,当该对...原创 2019-05-20 21:34:44 · 131 阅读 · 0 评论 -
JVM的内存布局
什么是JVM 首先JVM是运行Java代码的假想计算机,运行在操作系统之上的,与硬件没有直接的交互。Java源文件经过编译后形成字节码文件,通过JVM的类加载的机制进入Java虚拟机的运行数据区,再通过一套的字节码指令集,将Java的代码翻译成计算机能够识别的指令,最终实现Java代码在计算机上的运行实现。 其中的JVM内存布局的概念:指的就是JVM的运行数据区 JVM运行数据区 1、JV...原创 2019-05-20 20:40:07 · 211 阅读 · 0 评论 -
深入理解JVM虚拟机3:垃圾回收器详解
转自 JavaDoopHotSpot JVM 垃圾回收器更新时间:2018-03-28关于 JVM 内存管理或者说垃圾收集,大家可能看过很多的文章了,笔者准备给大家总结下。这算是系列的第一篇,接下来一段时间会持续更新。本文主要是翻译《Memory Management in the Java HotSpot ...转载 2019-03-18 18:23:53 · 102 阅读 · 0 评论 -
JVM调优(转)
https://www.jianshu.com/p/bc5410a6e69a转载 2019-10-10 14:19:10 · 100 阅读 · 0 评论