![](https://img-blog.csdnimg.cn/20200304225646830.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Jvm
Java虚拟机
南丘xf
好记性不如烂笔头——1枚昆明程序猿
展开
-
静态代码块是如何执行的?一般用在什么地方?
Jvm的类加载机制中,我们说过有一个阶段是初始化(Initialization),这个阶段的应用类加载器(Application or App ClasLoader)会收集所有的静态代码块并执行,而且只执行一次。所以这里有一个误区,很多人认为Java静态代码块是在类被加载时自动执行,这是错误的,需要注意的是,静态代码块只在类加载的初始化阶段执行。类被加载了,不一定会执行静态代码块,详情看代码:...原创 2020-03-23 17:44:58 · 1590 阅读 · 0 评论 -
我们为什么要学习类加载机制?在实际编程中有什么用?
说到类加载机制,又不得不提Java代码执行过程,源码(.java)文件被编译成字节码(.class)文件,再由Jvm进行后续处理。其实这个后续处理过程,就是JVM的类加载机制,简单来说,就是把.class文件装载到内存,进行校验、解析、转换和初始化,最终形成可以被虚拟机直接使用的Java类型。这一个过程就是类加载的生命周期,类加载的生命周期总共分为7个阶段:加载、验证、准备、解析、初始化、使...原创 2020-03-21 22:59:49 · 1248 阅读 · 2 评论 -
Java中的四种引用类型之强引用、软引用、弱引用和虚引用
Java中有一个java.lang.ref.*包,该包提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互(通过引用对象类判断对象被垃圾回收器处理的状态)。引用的抽象接口:java.lang.ref.ReferenceReference就是引用的意思,Java中的引用从垃圾回收的角度来看分为:强引用(java.lang.ref.FinalReference)软引用(java.la...原创 2020-03-16 21:57:41 · 464 阅读 · 0 评论 -
GC垃圾回收之标记清除、复制、标记整理和分代回收算法详解
GC进行垃圾回收,首先通过引用计数法和根搜索法判断对象是否存活,再通过标记清除、或者复制、标记整理以及分代回收算法进行垃圾回收,本篇博客将对该4种算法进行详细讲解。1)标记清除其实很好理解,就是标记哪些是垃圾,然后执行清除就把空间清理出来了,这就是标记清除算法。假设上图中的小中大三种方块对应1M、2M和4M,清除标记的垃圾以后,就会产生很多段内存空间(内存碎片),而实际开辟内存空间时...原创 2020-03-11 18:00:40 · 1860 阅读 · 0 评论 -
JVM垃圾回收对象判定标准之可达性分析算法(根搜索法)
前文讲过引用计数法的最大缺点就是循环引用的问题,而为了解决这个问题,Java推出了可达性分析算法。可达性分析算法也称之为根搜索法,其原理是:从GC Roots节点(起始点)出发向下搜索,如果没有任何引用链相连(即GC Roots到对象不可达),则证明此对象不可用。什么是引用链?从起始点向下搜索所走过的路径被称为引用链(Reference Chain)。对象Object5、Objec...原创 2020-03-10 17:58:19 · 1999 阅读 · 1 评论 -
JVM垃圾回收算法与垃圾收集器有哪些?
Jvm进行垃圾回收,首先需要判断对象是否存活,那么如何判断对象是否存活呢?当垃圾收集器在对堆进行回收前,第一就是要确定哪些对象还在被引用,或者后面还需要被引用(即存活态),哪些是已经“死去”(即不可能再被任何途径使用),判断对象是否存活主要用两种算法,即引用计数算法和可达性分析算法。判断对象是否存活以后,Jvm主要通过4种垃圾回收算法进行垃圾回收,主要是:标记清除算法、复制算法、标记整理算法...原创 2020-03-10 14:12:30 · 669 阅读 · 0 评论 -
什么情况下会发生full Gc?如何排查频繁发生full Gc的原因?
GC就是Java的垃圾回收机制,要了解什么情况下会发生GC(即GC得触发条件),我们需要先了解JVM的内存模型结构,之前一篇文章已经详细讲解了Jvm的内存模型结构,而通常来说,GC主要针对的是堆(java heap)区。而java heap是分代的(年轻代和老年代),为什么要分代?其实也不难理解,分代就是为了优化性能,如果不分代,那就会导致所有对象揉在一块,那样GC就会对堆区域进行全扫描。所以...原创 2020-03-09 18:57:34 · 27240 阅读 · 3 评论 -
JVM垃圾回收对象判定标准之引用计数法
什么是JVM?俗称而言我们称之为Java虚拟机,从进程而言,它是一个独立运行的java程序:a)启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点。b)运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程...原创 2020-01-07 09:07:38 · 1218 阅读 · 0 评论 -
Tomcat内存调整和默认线程池调整
上线了很久的一个项目(财政数据共享平台),由于领导要求,新来的同事就把新项目(社保数据共享)做在了该项目上,这就导致了许多的问题,先从日志说起,该同事把数据获取和传送都打印出来,导致打的日志实在太多,每过一两天,就导致日志超过1个G。我们都知道,别说一个G,就是超过几百兆的日志文件,vi都比较慢,更别说搜索查找了,所以昨儿写了一个脚本,按天备份和压缩日志,而且上线了调整后的日志打印,这事处理完了,...原创 2019-09-26 09:37:53 · 3019 阅读 · 0 评论 -
用最简单的原理图深入剖析Jvm内存模型
线上图原创 2020-03-04 23:08:19 · 432 阅读 · 0 评论