`
yhef
  • 浏览: 70452 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JVM笔记

    博客分类:
  • Java
阅读更多
"运行时包"阻隔不同ClassLoader加载的类之间互相访问

.class文件的校验过程
1:class文件的结构检查,比如必须以0xCAFEBABE开头,文件长度与声明长度是否匹配等。
2:数据类型的语义检查,比如:返回类型、final类的强制规则、参数个数是否合法。
3:字节码验证,字节码流代表java的方法(由操作码和操作数组成),栈桢
4:符号引用的验证,验证所关联(引用)的类、方法、字段是否正确,即使不正确也只会在真正调用的时候才抛相应的异常

一个线程创建一个Java栈,当调用一个方法时则压入一个栈桢到该线程的java栈中,方法返回时就弹出。
栈桢由三部分组成:局部变量区(参数、局部变量)、操作数栈和帧数据区

jvm规范中,int 0表示false,非0整数表示true; boolean [] ,则是用byte[]来标识

装载(查找并装载类型的二进制数据)
   装载阶段的三个基本动作:
   1:通过该类型的全限定名,产生一个代表该类型的二进制数据流
   2:解析这个二进制数据流为方法区内的内部数据结构
   3:创建一个标识该类型的java.lang.Class类的实例
-->
连接(验证(正确性)-->准备(为类变量分配内存地址,并为其初始化默认值)-->解析(将符号引用转换为直接引用)(可选))
-->
初始化(把类变量初始化为正确初始值)
初始化一个类包含两个步骤:
   1:如果存在直接超类,且直接超类还没初始化,就先初始化直接超类
   2:如果类存在一个类初始化方法,就执行此方法
     初始化接口并不需要初始化它的父接口



方法区和堆都可以是不连续的内存区

引用类型:
1:类类型
2:接口类型
3:数组类型

方法区存储类型信息、类(静态)变量

类型信息包括:
1:类型的全限定名
2:类型的直接超类的全限定名
3:类型是类类型还是接口类型
4:类型的访问修饰符public /abstract /final
5:任何直接超接口的全限定名的有序列表
....
x:该类型的常量池
x:字段信息
x:方法信息
x:除了常量以外的所有类(静态)变量
x:一个到类ClassLoader的引用
x:一个到Class类的引用


.class文件的大致结构:
1:魔数:0xCAFEBABE;快速区分某个class文件是否是Java class文件
2:minor_version和major_version;辅助版本号和主版本号
3:constant_pool.count和constant_pool;
4:access_flags
5:this_class
6:super_class
7:interfaces_count和interfaces
8:fields_count和fields
9:methods_count和methods
10:attributes_count和attributes

常量池:
1:CONSTANT_Utf8_info表
2:CONSTANT_Integer_info
3:CONSTANT_Float_info
4:CONSTANT_Long_info
5:CONSTANT_Double_info
6:CONSTANT_Class_info
7:CONSTANT_String_info
8:CONSTANT_Fieldref_info
9:CONSTANT_Methodref_info
10:CONSTANT_InterfaceMethodref_info
11:CONSTANT_NameAndType_info


主动使用的六种情形,将会导致类或接口的初始化:
1:创建某个类的新实例时(new\反射\克隆\反序列化)
2:调用某个类的静态方法时
3:使用类或接口的非常量静态字段,或对该字段赋值时(用getstatic/putstatic指令时),用final修饰的静态字段除外,它被初始化为一个编译时的常量表达式
4:当调用Java API中的某些反射方法时,如Class中的方法或者java.lang.reflect包中的类的类方法
5:当初始化某个类的子类时
6:当虚拟机启动时某个被标明为启动类的类(即含有main()方法的那个类)


任何一个类的初始化都需要它的超类在此之前已经初始化,而接口,只有在某个接口所声明的非常量字段被使用时,该接口才会被初始化,而不会因为其子接口或子类的初始化而被初始化。

如果一个字段既是static的,又是final的,并且使用一个编译时常量表达式初始化,使用这样的字段,就不是对声明该字段的类的主动使用


GC种类:
1:引用计数,对象引用计数器
2:跟踪收集,图,标记并清除
3:压缩收集,程序-->句柄-->内存地址,移动碎块
4:拷贝收集,分配实际内存的2倍,同时使用的始终只有一块,当其中一块满的时候,停止应用程序,拷贝并整理碎片到令一块内存,切换工作的内存,再恢复程序
5:按代收集,把堆按对象的生命周期长短分成不同的代,GC最频繁地收集最年轻的代,如果对象多次没有被收集,则会标识为更高一代(生命周期更长)
分享到:
评论

相关推荐

    JVM笔记(阳哥).zip

    《JVM笔记(阳哥)》是一份深入探讨Java虚拟机(JVM)的资料,由阳哥精心整理。这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的...

    jvm视频及笔记

    通过观看"jvm视频",你可以直观地了解这些概念,并通过"jvm笔记"加深理解和记忆。理论学习后,实践操作是巩固知识的关键,尝试在实际项目中应用这些知识,解决性能问题,优化JVM配置,将使你对JVM的理解更加深入。

    jvm笔记

    JVM 笔记 今天,我们要讨论的是 JVM 的笔记,这个笔记包括了 JVM 的基本结构、类加载机制、类文件格式等内容。 首先,让我们来看一下 JVM 的基本结构。JVM 可以分为三个部分:CLASS LOADER、RUN TIME DATA AREA 和...

    深入JVM笔记word版

    ### 深入解析 JVM 内存区域 #### 一、Java内存区域概述 Java虚拟机(JVM)作为Java程序的运行环境,负责管理和分配内存资源。为了更好地理解和掌握JVM内部的工作机制,本篇文章将重点介绍JVM中的几个关键内存区域:...

    ImagesForJVM-JVM笔记图片

    【标题】"ImagesForJVM-JVM笔记图片" 提供的是一系列关于Java虚拟机(JVM)的图像资料,这些图片通常用于辅助理解和学习JVM的工作原理。JVM是Java程序运行的基础,它负责解释执行Java字节码,使得Java能够实现跨平台...

    JVM笔记.html

    JVM笔记.html

    JVM笔记资料压缩文件

    jvm笔记 1、jvm总体架构.pdf 2、堆内存内部结构.pdf 3、有关内存的常用配置参数.pdf 4、有关内存溢出和内存泄漏的知识点.pdf 5、jvm里的垃圾回收机制.pdf 6、jvm优化知识点升级和配置总结.pdf 7、Tomcat调优...

    狂神说jvm笔记.md

    狂神说JVM笔记

    kyle所著JVM笔记

    观宋红康老师视频所著JVM笔记

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...

    JVM笔记.docx

    【JVM 体系结构概述】 Java 虚拟机(JVM)是Java应用程序的核心,它作为操作系统上的一个抽象层,使得Java代码可以在任何支持JVM的平台上运行,无需关心底层系统的具体细节。JVM主要由以下几个部分构成: 1. 类...

    狂神说JVM探究.rar

    这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...

    jvm java虚拟机 调优 马士兵 笔记

    jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识

    学习jvm笔记.zip

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。在深入理解JVM之前,我们先要明白它的核心概念:类加载、内存管理、执行引擎、垃圾回收以及性能优化。 一、类加载机制 JVM...

    jvm中篇笔记.md

    ### JVM中篇笔记知识点 #### 一、Class 文件结构 ##### 1. 概述 - **字节码文件的跨平台性** - Java 的跨平台性体现在 "Write Once, Run Anywhere" (WORA),即一次编写,到处运行。Java 语言编写的源代码在编译...

    jvm笔记记录.docx

    ### JVM基础知识及类加载机制详解 #### Java程序的运行流程 Java程序的执行流程主要包含以下几个步骤: 1. **编译**: 将`.java`源文件编译为`.class`字节码文件。 2. **打包**: 将多个`.class`字节码文件打包为一...

    java学习:01.JVM笔记.md

    Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员...

    2020 宋红康 JVM 08 堆.pptx

    2020 宋红康 JVM 第 08 章 学习记录PPT。本章主要是讲述 堆空间划分、分配和回收。另外包括逃逸分析相关内容

    【狂神】JAVA学习全套笔记(完整版)

    内容包含: 1、JAVA SE 2、MySQL + JDBC 3、JAVA WEB 4、Mybatis 5、SSM 6、大前端 7、Vue 8、SpringBoot 9、Spring Security ...12、JVM 13、JUC 14、Git 15、Linux 16、Redis 17、ElasticSearch 18、Docker

    狂神说Java全部笔记内容,免费哦!

    狂神说的全部笔记PDF

Global site tag (gtag.js) - Google Analytics