大概两三个月之前阅读了《深入理解Java虚拟机》(周志明著),也为了加深印象,这里简单的做下总结,想完整点了解JVM知识的也可以阅读本书,书写的不错,相当通俗易懂。


第一部分 内存管理机制:

Java内存区域与内存溢出:

Java内存区域分为堆、栈(Java虚拟机栈和本地方法栈,不过对于hotspot来讲,是一致的)、方法区、程序计数器、直接内存区域(NIO的allocateByDireactMemory)等。借用@兰亭风雨 的图片一张

其中方法区用于加载类信息、常量、静态变量、即时编译器编译后的代码等数据的存储(运行时常量池也是方法区的一部分,Class文件的结构包括魔数、版本号、域、接口、方法等信息,常量池(Class文件常量池),用于存放编译器生成的各种字面量和符号引用)、堆区用于存放对象实例、栈的话通过压入或者弹出栈帧来控制程序,每个方法被执行的时候都会同时创建一个栈帧,一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体的虚拟机实现。

内存溢出异常可以发生在栈、方法区、以及堆区(又被成为GC堆)。栈区如果发生溢出,可能是由于栈深度超出或者是线程栈的数量太多。方法区溢出原因可能是动态生成大量类或者是使用了String.intern()方法,堆区是可能由于new了大量的对象。

JVM垃圾回收:

要回收一个对象,首先要判断该对象是否无用,有两种方法:引用计数法和图的可达性分析(GC ROOTS:栈帧中的引用对象、方法区静态常量引用对象、本地方法引用对象)的方法。其中引用分四个类别:强引用、软引用、弱引用、影子引用(虚引用),引用强度依次减弱。JVM垃圾回有三种算法,复制、标记删除、标记整理,同时采用分代分代算法,基本上Young代采用复制,Old代采用标记删除或者整理。安全点(safepoint),JVM只有执行到安全点才会进行GC工作,安全点一般在方法调用、循环跳转、异常跳转等,有两种方法使得程序跑到安全点,分为抢占式和主动式。

Hotspot的垃圾收集器不算G1的话有6种,其中Serial(串行)、ParNew、Parallel作用于新生代,CMS、Serial Old、Parallel Old作用于老年代。具体的内容有空再补充上。基本上Web服务器采用CMS+ParNew的组合,降低响应时间。CMS的四次标记过程也是需要记住的,分别是初始标记、并发标记、重新标记、并发清楚。

JVM基本知识总结的更多相关文章

  1. JVM 基础知识

    JVM 基础知识(GC) 2013-12-10 00:16 3190人阅读 评论(1) 收藏 举报 分类: Java(49) 目录(?)[+] 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看 ...

  2. JVM基础知识(1)-JVM内存区域与内存溢出

    JVM基础知识(1)-JVM内存区域与内存溢出 0. 目录 什么是JVM 运行时数据区域 HotSpot虚拟机对象探秘 OutOfMemoryError异常 1. 什么是JVM 1.1. 什么是JVM ...

  3. JVM相关知识

    Java虚拟机学习分享最近主要在学习JVM相关知识,-知识主要来源<深入理解JAVA虚拟机>,深有感触,结合自己的理解,整理出一些经验,由于篇幅较长,就把链接帖出来,希望对大家有所帮助: ...

  4. JVM核心知识体系(转http://www.cnblogs.com/wxdlut/p/10670871.html)

    1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...

  5. JVM基础知识总结

    因为没深入搞底层研究,所以也就没做很细致的笔记.相关笔记内容是直接从度娘那儿来的,重新删减.整理和加了点自己的东西. 1.JVM(Java Virtual Machine)是什么:JVM是一种用于计算 ...

  6. JVM内存知识备忘

    又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...

  7. Java-100天知识进阶-JVM内存-知识铺(三)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚 ...

  8. JVM虚拟机知识问答总结(简单复习,快速回忆!)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  9. JVM基础知识

    JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.J ...

随机推荐

  1. JBoss、Tomcat、JBoss EAP、JBoss AS、wildfly,JBoss EAP安装部署,JBoss各个版本下载,JBoss允许远程访问

    感谢: https://www.cnblogs.com/invlong/p/5983334.html https://blog.csdn.net/mooncarp/article/details/78 ...

  2. spring4.3.5基本配置

    1.去官网下载必要的jar包,以及: 2.新建一个web项目,在Window->Java->Build Path->User Libraries 按照步骤1,2把spring的jar ...

  3. JVM简介及类加载机制(一)

    JVM介绍: 目标:JVM运行字节码文件,根据JVM的日志调节程序,对于底层原理有一定的了解 1. 类加载 在JAVA代码中,类型的加载,连接与初始化都是在程序运行期间完成的,提供了灵活性增加了更多的 ...

  4. UVA 10242 Fourth Point

    题意:给你平行四边形两条边的顶点,让你求第四个点. 思路:要找到俩边的公共点,然后向量运算. AC代码: #include<cstdio> #include<cmath> #i ...

  5. Kali Linux 2018 更新源配置

    查看添加更新源 编辑sources.list,将kali更新源加入其中 sudo vim /etc/apt/sources.list 国内更新源 #阿里云 deb http://mirrors.ali ...

  6. 设计模式四人帮(GOF)是什么?

    1994年,有四位作者:Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides发表了一本题为<设计模式 - 可重用的面向对象软件元素>的 ...

  7. 高级UI晋升之触摸事件分发机制(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践 ...

  8. hdu6354 /// 线段树

    题目大意: 给定n m x y z 长度为n的序列初始为0 接下来m个操作 l r v 将l r区间内比v小的数都变成v l r v由x y z和给定的函数生成 线段树维护区间 最大值 最小值 再加 ...

  9. C语言之文件包含

    c = #include <stdio.h> #include "A.h" int main() { /******************************** ...

  10. 2018-12-21-微软最具价值专家-MVP-如何获得-Resharper-的免费功能

    title author date CreateTime categories 微软最具价值专家 MVP 如何获得 Resharper 的免费功能 lindexi 2018-12-21 11:29:0 ...