- 博客(8)
- 收藏
- 关注
原创 JVM系列(七) - JVM线上监控工具
前言通过上一篇的 JVM 垃圾回收知识,我们了解了 JVM 具体的 垃圾回收算法 和几种 垃圾回收器。理论是指导实践的工具,有了理论指导,定位问题的时候,知识和经验是关键基础,数据可以为我们提供依据。在线上我们经常会遇见如下几个问题:内存泄露;某个进程突然 CPU 飙升;线程死锁;响应变慢。如果遇到了以上这种问题,在 线下环境 可以有各种 可视化的本地工具 支持查看。...
2018-08-23 15:16:34 788
原创 JVM系列(六) - JVM垃圾回收器
前言在之前的几篇博客中,我们大致介绍了,常见的 垃圾回收算法 及 JVM 中常见的分类回收算法。这些都是从算法和规范上分析 Java 中的垃圾回收,属于方法论。在 JVM 中,垃圾回收的具体实现是由 垃圾回收器(Garbage Collector)负责。正文概述在了解 垃圾回收器 之前,首先得了解一下垃圾回收器的几个名词。1. 吞吐量CPU 用于运行用户代码的时...
2018-08-23 15:15:09 314 1
原创 JVM系列(五) - JVM类加载机制详解
前言本文将由浅及深,介绍Java类加载的过程和原理,进一步对类加载器的进行源码分析,完成一个自定义的类加载器。正文(一). 类加载器是什么类加载器简言之,就是用于把.class文件中的字节码信息转化为具体的java.lang.Class对象的过程的工具。具体过程:在实际类加载过程中,JVM会将所有的.class字节码文件中的二进制数据读入内存中,导入运行时...
2018-08-23 15:03:10 302
原创 JVM系列(四) - JVM垃圾回收算法
前言前面介绍了Java内存运行时区域,其中程序计数器、虚拟机栈、本地方法栈 三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性。在这几个区域内不需要过多考虑回收的问题,因为方法结束或线程结束时,内存自然就跟随着回收了。Java堆 和 方法区...
2018-08-23 14:40:59 282
原创 JVM系列(三) - JVM对象探秘
前言对于 JVM 运行时区域有了一定了解以后,本文将更进一步介绍虚拟机内存中的数据的细节信息。以JVM虚拟机(Hotspot)的内存区域Java堆为例,探讨Java堆是如何创建对象、如何布局对象以及如何访问对象的。正文(一). 对象的创建说到对象的创建,首先让我们看看 Java 中提供的几种对象创建方式: Header 解释 使用new关键...
2018-08-23 14:38:03 308 1
原创 JVM系列(二) - JVM内存区域详解
前言JVM内存区域包括 PC计数器、Java虚拟机栈、本地方法栈、堆、方法区、运行时常量池和 直接内存。本文主要介绍各个内存区域的作用和特性,同时分别阐述各个区域发生内存溢出的可能性和异常类型。正文(一). JVM内存区域Java虚拟机执行Java程序的过程中,会把所管理的内存划分为若干不同的数据区域。这些内存区域各有各的用途,以及创建和销毁时间。有的区域随着虚...
2018-08-23 14:34:19 462 1
原创 JVM系列(一) - JVM总体概述
前言JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上一次编译,多次运行,具有跨平台性。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。J...
2018-08-23 14:33:07 7762
原创 Java基础篇 - 强引用、弱引用、软引用和虚引用
前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。 引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4...
2018-08-23 13:53:20 3173 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人