
jvm
文章平均质量分 93
你是我的天晴
wx:lexang
展开
-
jvm,深入理解java虚拟机,虚拟机性能监控与故障处理工具(JDK的命令行工具和 JDK的可视化工具)
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度,但在学习工具前,也应当意识到工具永远都是知识技能的一层包装,没有什么工具是“秘...原创 2022-02-14 10:45:17 · 377 阅读 · 0 评论 -
jvm,深入理解java虚拟机,内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在我们再一起来探讨一下给对象分配内存的那点事儿。对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配[1]),对象主要分配在新生代的Eden区上,如...原创 2022-01-22 16:23:43 · 413 阅读 · 0 评论 -
jvm,深入理解java虚拟机,垃圾收集算法与垃圾收集器
垃圾收集算法由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程。标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对...原创 2022-01-20 09:13:43 · 327 阅读 · 0 评论 -
jvm,深入理解java虚拟机,对象已死吗
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。作者面试过很多的应届生和...原创 2022-01-18 11:11:37 · 148 阅读 · 0 评论 -
jvm,深入理解java虚拟机,实战:OutOfMemoryError异常
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能,本节将通过若干实例来验证异常发生的场景(代码清单2-3~代码清单2-9的几段简单代码),并且会初步介绍几个与内存相关的最基本的虚拟机参数。本节内容的目的有两个:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,希望读者在工作中遇...原创 2022-01-17 19:18:20 · 677 阅读 · 0 评论 -
Java虚拟机垃圾收集器分析 基本回收算法 垃圾回收器
java虚拟机垃圾收集器分析1 、活动对象追踪 root 对象算法: 深度追踪 root 对象,将 heap 中所有被引用到的 root做标志,所有未被标志的对象视为非活动对象,所占用的空间视为非活动内存。2 、常用算法Copy 算法 1 方法:将内存分为两个区域( from space 和 to space )。所有的对象分配内存都分配到 from space 。在清理非活动对象阶段,把所有标志为活动的对象, copy 到 to space ,之后清楚 from space 空间。然原创 2022-01-16 10:40:30 · 155 阅读 · 0 评论 -
jvm,深入理解java虚拟机,HotSpot虚拟机对象探秘
对象的创建Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代...原创 2022-01-16 10:39:35 · 300 阅读 · 0 评论 -
jvm,深入理解java虚拟机,运行时数据区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(JavSE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图示。程序计数器程序计数器(Program Counter Reg...原创 2022-01-15 10:45:41 · 130 阅读 · 0 评论 -
java内存模型,JVM参数调优技巧,GC故障解决
一、JVM内存区域模型是啥样?这个是JVM大致的内存分布模型,看起来比较直观: 1.方法区: 也称”永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。可以说方法区就是公共存放常量等静态的常量池。 运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,转载 2017-08-30 14:38:46 · 1051 阅读 · 0 评论