JVM虚拟机学习整理
最近学习java虚拟机,找到很多博文对JVM都有深入的讲解分析,在此做一个简单的整理。
本文整理的思路主要围绕:JAVA程序开发完成之后,如何由.java转换成.class文件?class文件怎么被虚拟机加载?加载后放在虚拟机的什么位置?字节码怎么被虚拟机执行?执行过程中产生的垃圾怎么被虚拟机回收的?以及jvm的一些性能优化。
java虚拟机内存结构如下图:
开发人员编写的java代码(.java)通常都是通过静态编译器(javac)编译成字节码byteCode(.class)的。javac 主要作用在于将源码编译为字节码,同时做一些词法,语法,语义上的检查,最后生成可供jvm运行的字节码文件。详细学习博文:javac 实现原理,JVM编译器的编译过程
编译好的字节码文件,会由java虚拟机的类加载机制,负责加载到java虚拟机中。类加载机制如下:加载、链接(验证、准备、解析)、初始化。默认的加载双亲委派。详细学习博文:深入理解JVM一加载机制
类加载器加载class文件,会把字节码载入方法区,并生成对应Class对象放在堆区,以供运行使用。java虚拟机将运行数据区分成:方法区、堆区、虚拟机栈、本地方法栈、程序计数器。方法区、堆区是所有线程共享的,其它是各自线程独有。详细学习博文:深入理解JVM 一内存
执行字节码,深入理解JVM一字节码执行
垃圾回收主要是对方法区、堆区的空间进行回收。
垃圾回收算法、垃圾回收器:深入理解JVM 一GC(上),深入理解JVM 一GC(下),深入理解GC ——MinorGC\MajorGC\FullGC,触发JVM进行Full GC的情况及应对策略
本文主要是对阅读相关博文的一个梳理,文中若有不当之处,还望不吝赐教,一起探讨,相互学习,共同进步。
Java Garbage Collection Basics