
Java虚拟机详解
JVM修炼
程序员可乐、
一个有故事的程序员,持续更新技术教程
展开
-
Java虚拟机详解(六)------内存分配
我们说Java是自动进行内存管理的,所谓自动化就是,不需要程序员操心,Java会自动进行内存分配和内存回收这两方面。 前面我们介绍过如何通过垃圾回收器来回收内存,那么本篇博客我们来聊聊如何进行分配内存。 对象的内存分配,往大方向上讲,就是堆上进行分配(但也有可能经过JIT编译后被拆散为标量类型并间接的在栈上分配),对象主要分配在新生代 Eden 区上,如果启动了本地线程分...原创 2019-08-21 07:54:00 · 246 阅读 · 0 评论 -
Java虚拟机详解(十一)------双亲委派模型
在上一篇博客,我们介绍了类加载过程,包括5个阶段,分别是“加载”,“验证”,“准备”,“解析”,“初始化”,如下图所示: 本篇博客,我们来介绍Java虚拟机的双亲委派模型,在介绍之前,我先抛出一个问题: 我们知道,在JDK源码中,有各种Java自带的类,比如java.lang.String,java.util.List等,那么我们自己的项目中,能够写一个命名...原创 2020-01-06 22:20:00 · 223 阅读 · 0 评论 -
Java虚拟机详解(十)------类加载过程
在上一篇文章中,我们详细的介绍了Java类文件结构,那么这些Class文件是如何被加载到内存,由虚拟机来直接使用的呢?这就是本篇博客将要介绍的——类加载过程。1、类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为止,其声明周期流程如下: 上图中红色的5个部分(加载、验证、准备、初始化、卸载)顺序是确定的,也就是说,类的加载过程必须按照这种顺序按部就班的开...原创 2019-11-25 22:18:00 · 205 阅读 · 0 评论 -
Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化
上篇博客我们介绍了虚拟机监控和分析命令行工具,由于其不够直观,不是很容易排查问题,那么本篇博客我们就来介绍几个可视化工具。1、JConsole JConsole(Java Monitoring and Management Console)是一款基于 JMX 的可视化监视和管理的工具。它管理部分的功能是针对 JMX MBean 进行管理,MBean 可以使用代码、中间件服务...原创 2019-08-30 07:57:00 · 216 阅读 · 0 评论 -
Java虚拟机详解(三)------垃圾回收
如果对C++这门语言熟悉的人,再来看Java,就会发现这两者对垃圾(内存)回收的策略有很大的不同。 C++:垃圾回收很重要,我们必须要自己来回收!!! Java:垃圾回收很重要,我们必须交给系统来帮我们完成!!! 我想这也能看出这两门语言设计者的心态吧,总之,Java和C++之间有一堵由内存动态分布和垃圾回收技术所围成的高墙,墙外面的人想进去,墙里面的人想出来。 本篇博...原创 2019-07-15 19:35:00 · 298 阅读 · 0 评论 -
Java虚拟机详解(四)------垃圾收集器
上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢? 没错,就是本篇博客介绍的内容——垃圾收集器。1、垃圾收集器种类 事实上Java虚拟机规范对垃圾收集器应该如何实现,并没有任何的规定,所以不同的厂商、不同版本的虚拟机所提供的垃圾收...原创 2019-08-07 08:21:00 · 183 阅读 · 0 评论 -
Java虚拟机详解(五)------JVM参数(持续更新)
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。下面我们就来对这些JVM参数进行详细的介绍。 JVM参数主要分为以下三种(可以根据书写形式来区分):1、标准参数 标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本...原创 2019-08-18 08:56:00 · 189 阅读 · 0 评论 -
Java虚拟机详解(一)------简介
本系列博客我们将以当前默认的主流虚拟机HotSpot 为例,详细介绍 Java虚拟机。以 JDK1.7 为主,同时介绍与 JDK1.8 的不同之处,通过Oracle官网以及各种文献进行整理,并加以验证,力求保证这块知识的正确性,完整性。 以下是本系列博客参考的相关文档: ①、JDK1.7虚拟机规范:https://docs.oracle.com/javase/specs/jvms/...原创 2019-06-30 10:39:00 · 747 阅读 · 0 评论 -
Java虚拟机详解(二)------运行时内存结构
首先通过一张图了解 Java程序的执行流程: 我们编写好的Java源代码程序,通过Java编译器javac编译成Java虚拟机识别的class文件(字节码文件),然后由 JVM 中的类加载器加载编译生成的字节码文件,加载完毕之后再由 JVM 执行引擎去执行。在加载完毕到执行过程中,JVM会将程序执行时用到的数据和相关信息存储在运行时数据区(Runtime Data Area),这...原创 2019-07-05 07:20:00 · 344 阅读 · 0 评论 -
Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行
通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的。但是话又说回来,在实际生产环境中,线上项目正在运行,我们怎么去监控虚拟机运行效率?又或者线上项目发生了OOM,异常堆栈信息,我们又怎么去抓取,然后怎么去分析定位问题呢? 本篇博客,我们就来介绍各种虚拟机监控和分析工具,当然都是命令...原创 2019-08-28 08:04:00 · 197 阅读 · 0 评论 -
Java虚拟机详解(九)------类文件结构
我们知道计算机是由晶体管、电路板等组装而成的电子设备,而这些电子设备其实只能识别0与1的信号。 那么问题来了,我们在操作系统上编写的Java代码(由字母、数字等各种符号组成),打包后部署到服务器上,是如何被计算机所识别并运行的呢?另外,操作系统有很多种,包括Windows系统,Linux系统,Mac OS系统等,而我们同样的Java代码,却可以不做任何处理在不同的系统上正常运行...原创 2019-11-11 22:51:00 · 524 阅读 · 0 评论