
JVM
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
内存溢出和内存泄漏
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 memory leak会最终会导致out ofmemory。 Java 堆内存的OutOfMemoryError异常是实际应用中最常见的内存溢出异常转载 2020-09-28 20:13:28 · 259 阅读 · 0 评论 -
JVM原理讲解和调优
一、什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Jav转载 2020-09-11 16:30:13 · 343 阅读 · 0 评论 -
JVM内存图总览
原创 2020-09-09 16:25:57 · 131 阅读 · 0 评论 -
根搜索算法的实例讲解
概念 这个算法的基本思想是通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。 那么问题又来了,如何选取GCRoots对象呢? 在Java语言中,可以作为GCRoots的对象包括下面几种: (1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 (2). 方法区中的类静态属性引用的对象。 (3). 方法区中常量引用的对象。 (4). 本地方转载 2020-09-03 15:44:31 · 799 阅读 · 0 评论 -
垃圾收集器
Serial收集器 Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器了(新生代采用复制算法,老生代采用标志整理算法)。大家看名字就知道这个收集器是一个单线程收集器了。 它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( “Stop The World” :将用户正常工作的线程全部暂停掉),直到它收集结束。 看图理解: 上图中: 新生代采用复制算法,Stop-The-World 老年代采用标记-转载 2020-08-21 17:02:15 · 237 阅读 · 0 评论 -
垃圾回收算法
垃圾收集算法 1、引用计数(reference counting) 原理:此对象有一个引用,则+1;删除一个引用,则-1。只用收集计数为0的对象。 缺点:无法处理循环引用的问题。如:对象A和B分别有字段b、a,令A.b=B和B.a=A,除此之外这2个对象再无任何引用,那实际上这2个对象已经不可能再被访问,但是引用计数算法却无法回收他们。 2、复制(copying) 原理:把内存空间划分为2个相等的区域,每次只使用一个区域。垃圾回收时,遍历当前使用区域,把正在使用的对象复制到另外一个区域。 优点:不会出现碎片原创 2020-08-21 16:24:19 · 150 阅读 · 0 评论 -
双亲委派机制
参考文章 oracle 官方文档 Class Lo...转载 2020-04-10 18:45:35 · 1518 阅读 · 1 评论 -
JVM之类加载子系统
一、类加载器基本概念 顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来...原创 2020-04-14 09:52:23 · 118 阅读 · 0 评论 -
JVM之运行时数据区-栈区
栈的基本概念 Java栈有两个,分别是虚拟机栈和本地方法栈。这里以虚拟机栈为例,本地方法栈和虚拟机栈基本相同。 特点: 线程私有 描述的是Java方法执行的内存模型 关键知识点:栈帧 每个方法执行时会创建一个栈帧(栈帧是方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到执行完成的过程,就对应一个栈帧在虚拟机栈中的入栈和出栈的过程。 栈帧中的局部变量表...转载 2020-04-14 09:01:29 · 118 阅读 · 0 评论 -
JVM基本描述
如上面架构图所示,JVM分为三个主要子系统: 类加载器子系统(Class Loader Subsystem) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 类加载器子系统 Java的动态类加载功能由类加载器子系统处理,处理过程包括加载和链接,并在类文件运行时,首次引用类时就开始实例化类文件,而不是在编译时进行。 1.1 加载 Boot St...原创 2020-04-14 08:14:32 · 198 阅读 · 0 评论