
Java虚拟机(JVM)探究
文章平均质量分 79
从零开始了解JVM的各种知识,从JVM的基本结构,到堆、栈的参数分配,GC的算法和种类,GC参数等信息,让开发人员充分理解JVM的基本原理,以及在实际开发中运用调参提高系统性能
光仔December
技术宅,系统集成项目管理工程师,FCP-报表开发工程师,全国软件开发(C/C++)专业人才高级认证,2014年ACM-ICPC河南省赛区银奖,2014年第五届蓝桥杯河南赛区C/C++程序设计本科B组二等奖,2015年甲骨文杯全国Java程序设计大赛华中赛区A组二等奖,2015年中国大学生计算机设计大赛团队三等奖
展开
-
【Java虚拟机探究】10.类装载器(下)
上一篇我们总结了类加载器的基本原理和与应用程序相关的ClassLoader,并提到了双亲委派模式。本篇继续探讨类加载器的双亲委派模式,以及如何破坏双亲委派模式达到加载底层类的目的。1.双亲委派模式的问题我们回顾一下原来的应用程序的ClassLoader的加载模式:除了顶层的ClassLoader,每一个ClassLoader都有一个父级ClassLoader,当加载一个类的时候,是自底向上...原创 2018-07-21 16:31:34 · 719 阅读 · 0 评论 -
【Java虚拟机探究】9.类装载器(上)
在JVM类要通过类装载器(ClassLoader)进行装载后,才能进行执行。本篇总结了类装载器的一些知识。一、class装载验证流程在第一篇总结中介绍了JVM的内存结构:可以看到class文件首先要通过“类加载器子系统”,才能被加载到内存中处理。那么class文件是怎么通过类加载器加载至内存中的呢?下面是class装载验证的流程:加载--->连接--->初始化其中链接又可以分为...原创 2018-07-14 21:06:20 · 892 阅读 · 0 评论 -
【Java虚拟机探究】8.GC参数
之前我们讲解了JVM的GC垃圾回收的算法与种类,本篇我们来介绍一下GC的各种收集器。通过运行参数的调整,我们可以设置GC的垃圾回收器类型,主要有串行收集器、并行收集器、CMS收集器。下面会一一给大家介绍。一、堆的回顾在介绍回收器之前,我们先回顾一下之前的堆的知识:前面提到过,堆根据类型可以分为新生代和老年代。其中新生代就是上图中的eden、s0和s1区域,老年代就是上图中的tenured。其中新生...原创 2018-06-18 13:16:54 · 844 阅读 · 1 评论 -
【Java虚拟机探究】7.GC算法与种类(下)
上一篇我们讲解了“引用计数法”、“标记清除法”、“标记压缩法”以及“复制算法”这几种垃圾回收的算法。那这些算法都是如何识别一个垃圾对象的呢?换言之,是如何判定该对象是垃圾对象的呢?这里需要给出一个可触及性的定义。本篇主要讲解可触及性的相关知识。一、什么是可触及性可触及性分为“可触及的”、“可复活的”和“不可触及”的三种状态。(下面提到的finalize()是Object的protected方法,子...原创 2018-06-09 11:37:48 · 484 阅读 · 0 评论 -
【Java虚拟机探究】6.GC算法与种类(上)
之前讲解了JVM的一些常用配置参数,在里面提到了堆的一些区域,分为新生代和老年代,GC是专门对堆内存进行清理的。本篇我们来探讨GC针对堆内存的垃圾回收的算法与种类。一、GC的概念GC就是“Garbage Collection”垃圾收集的意思,这个“垃圾”指的就是Java系统在运行过程中产生的一些已经无用的“对象”,而这些“对象”是占据着一定空间的,如果这些对象不被及时释放掉,最终会导致内存被耗尽,...原创 2018-06-02 16:49:26 · 610 阅读 · 0 评论 -
【Java虚拟机探究】5.常用JVM配置参数-栈的分配参数
在使用JVM编译java时,都会去设置相关的参数(例如使用eclipse的时候,可以设置eclipse的eclipse.ini文件来对jvm做一些参数配置)。jvm的参数设置主要涉及到三种,分别是Trace跟踪参数、堆的分配参数、栈的分配参数。本章主要讲解栈的分配参数的相关信息。1.栈大小分配分配参数:-Xss特点:(1)局部变量、参数都分配在栈上。(2)栈的内存通常只有几百k,但是它决定了函数调...原创 2018-06-02 14:10:13 · 5609 阅读 · 1 评论 -
【Java虚拟机探究】4.常用JVM配置参数-堆的分配参数
在使用JVM编译java时,都会去设置相关的参数(例如使用eclipse的时候,可以设置eclipse的eclipse.ini文件来对jvm做一些参数配置)。jvm的参数设置主要涉及到三种,分别是Trace跟踪参数、堆的分配参数、栈的分配参数。本章主要讲解堆的分配参数的相关信息。我们都知道,Java程序运行过程中,类的实例对象都是存储在堆内存中的,堆内存的设置对程序的运行和优化有着十分重要的左右。...原创 2018-05-26 15:27:50 · 2826 阅读 · 1 评论 -
【Java虚拟机探究】3.常用JVM配置参数-Trace跟踪参数
在使用JVM编译java时,都会去设置相关的参数(例如使用eclipse的时候,可以设置eclipse的eclipse.ini文件来对jvm做一些参数配置)。jvm的参数设置主要涉及到三种,分别是Trace跟踪参数、堆的分配参数、栈的分配参数。本章主要讲解Trace跟踪参数的相关信息。(1)开启GC日志和打印简要信息跟踪参数主要对jvm的GC(垃圾回收器)的状况。可以使用以下两种配置方式打开GC的...原创 2018-05-26 15:19:15 · 1200 阅读 · 2 评论 -
【Java虚拟机探究】2.JVM基本结构(下)
上一篇我们介绍了JVM的基本信息,以及内存结构(堆、栈、方法区、程序计数器、本地方法栈)。本篇我们来介绍内存结构中不同区域的交互,以及内存处理机制。一、栈、堆、方法区交互在探讨交互之前,我们先回顾一下栈、堆、方法区的作用:(1)栈存储的是局部变量信息(2)堆存储的是类的实例对象(也就是new出来的东西)(3)方法区存储的是类的结构信息,包括常量池、静态变量、构造函数等。下面是两个类,一个是AppM...原创 2018-05-19 15:31:15 · 542 阅读 · 1 评论 -
【Java虚拟机探究】1.JVM基本结构(上)
一、什么是JVM使用过Java语言开发的童鞋,肯定知道,Java的编译就是依靠JVM来实现的,其实JVM就是Java虚拟机(Java Virtual Machine),JVM可以将Java语言解释成具体平台上的机器指令来执行,这也是Java为什么会跨平台的原因,因为无论是什么平台,高级语言都是需要编译成不同的目标代码后,才能被平台识别,而Java虚拟机的出现,使得Java语言在不同的平台上运行不需...原创 2018-05-14 21:33:50 · 1079 阅读 · 0 评论