美文网首页
JVM知识简介

JVM知识简介

作者: 零下的雨 | 来源:发表于2020-04-08 11:34 被阅读0次

(一)jvm:
java虚拟机,一次编译在多种平台上都可以直接运行。
设置jvm虚拟机的内存配置、新生代老生代的配置,能达到不同的效果。

jvm的组成:
堆、虚拟机栈、本地方法栈、程序计数器、方法区

多种垃圾回收算法:
标记清除算法、复制算法

垃圾收集器:
学习了收集器后可以为程序设置有效的配置,让程序运行顺畅

Java分析工具:
命令行工具

Java类加载机制:
能透明的看到Java在jvm中运行的整个过程

jvm常用优化配置:
让程序在最佳配置下运行

jvm运行原理:
程序在执行之前先要把java代码转换成字节码(class文件),jvm首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area) ,而字节码文件是jvm的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能,这就是这4个主要组成部分的职责与功能。

(二)运行时数据区比较重要:
具体包含jvm的组成部分,也就是堆、虚拟机栈、本地方法栈、程序计数器、方法区

程序计数器:
程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解析器的工作是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

虚拟机栈、本地方法栈:
私有内存,
Java虚拟机栈(Java Virtual Machine Stacks)描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个线帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每个方法从调用直至执行完成的过程,都对应着一个线帧在虚拟机栈中入栈到出栈的过程。常用的就是用来存放声明的对象,堆中存放对象的实例。

java堆:
Java堆(Java Heap)是Java虚拟机中内存最大的一块,是被所有线程共享的,在虚拟机启动时候创建,Java堆唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

本文讲了jvm的主要组成部分,以及组成部分中最重要的运行时数据区(Runtime Data Area)的构成,其中程序计数器、虚拟机栈和本地方法为私有内存,会随着线程而生,随着线程而灭,而Java堆作为最大的内存区域将是开发人员重点关注的内存区域,还有方法区以及运行时常量区与永生代的关系,最后讲了直接内存的实现过程已经使用时需要关注的点,希望能够帮助大家更好的理解jvm。

(三)对象的生死判定和算法计算
GC:垃圾回收
排查系统内存溢出和内存泄漏;系统调优,处理更高的系统瓶颈。
对象生死判定算法:只有死去的对象才会被当成垃圾被回收。
对象生死与引用的关系:
强引用、软引用、弱引用、虚引用
强引用:在代码中普遍存在的,类似“Object obj = new Object()”这类引用,只要强引用还在,垃圾收集器永远不会回收掉被引用的对象。
软引用:是一种相对强引用弱化一些的引用,可以让对象豁免一些垃圾收集,只有当jvm认为内存不足时,才会去试图回收软引用指向的对象。jvm会确保在抛出OutOfMemoryError之前,清理软引用指向的对象。
弱引用:非必需对象,但它的强度比软引用更弱,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。
虚引用:也称为幽灵引用或幻影引用,是最弱的一种引用关系,无法通过虚引用来获取一个对象实例,为对象设置虚引用的目的只有一个,就是当着个对象被收集器回收时收到一条系统通知。

(四)垃圾回收算法:
1、标记清除算法
2、复制算法
3、标记整理算法
4、分代收集算法

1、标记清除算法
是最基础的算法,先标记需要回收的对象然后再统一清除。
2、复制算法
是同时申请两块内存,当前的一块使用完了就把存活的对象复制到另一块中使用,然后再一起清除。
3、标记整理算法
先标记需要回收的对象,但不清除,把存活的对象挪到标记的位置,然后再清理存活的对象的内存地址,目的为了让内存有连续的使用空间。
4、分代收集算法
现在都分为两种内存空间,存活率低的对象放到新生代内存空间中,使用复制算法清除,存活率高的放到老年代内存空间中,使用标记清除和标记整理算法清除内存。

垃圾回收执行细节:
hotspot虚拟机是目前java中使用最广泛的虚拟机。
垃圾回收流程:Java虚拟机在回收垃圾时先暂停程序的执行,就是stop the world,使用可达性分析算法枚举 GC roots标记出死亡对象,然后统一清除对象。

下面细节不太理解:
首先Oop map是什么?
在JIT编译的时候就会使用OopMap数据结构来记录栈和寄存器上的引用,这样虚拟机就直接知道了那些地方存放着对象的引用。
安全点是什么?
在OopMap的协助下,HotSpot可以快速的完成GC Roots枚举,但导致OopMap内容变化的指令很多,而且如果给每个对象生成对应的OopMap,会造成大量额外的空间,这会导致GC成本很高,所以HotSpot只会在“特定的位置”生成对应的OopMap,这些位置就成为“安全点”。
HotSpot也并不是任何时刻都会停顿下来进行GC,只会在程序都到底安全点之后才会GC,所以安全点的设置不能太少,让GC等待时间太长,也不能太多增大运行时的成本。

相关文章

  • JVM知识简介

    (一)jvm:java虚拟机,一次编译在多种平台上都可以直接运行。设置jvm虚拟机的内存配置、新生代老生代的配置,...

  • JVM简介

    1.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设...

  • JVM简介

    1.一段java程序是如何运行起来的呢? Java源文件,通过编译器,产生.Class字节码文件,字节码文件通过J...

  • JVM简介

    JVM是Java Virtual Machine(Java虚拟机)的缩写,是实现java跨平台特性的关键。Java...

  • JVM:简介

    写在前面 1.目前已从事Java开发接近三年,前两年忙于熟悉公司系统及业务,且一直认为程序员能实现业务开发即可(大...

  • JVM简介

    JVM基本概念 JVM是可运行java代码的假想计算机,运行在操作系统之上,与硬件没有直接交互。JVM的基本组成:...

  • JVM简介

    [TOC] 一、什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一...

  • JVM基础知识系列

    JVM基础系列 JVM知识点扫盲系列(1) JVM知识点扫盲系列(2) JVM内存的那些事 JVM类加载的那些事 ...

  • JVM学习笔记

    JVM学习笔记 JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种...

  • 奥利给!啃烂这套“核心知识”+“高级面试”,成功定级腾讯Java

    01 JVM 1.1 核心知识之JVM 1.2 高级面试之JVM 02 Java集合 2.1 核心知识之Java集...

网友评论

      本文标题:JVM知识简介

      本文链接:https://www.haomeiwen.com/subject/qcnzphtx.html