JVM-Java虚拟机

本文详细阐述了JVM的概念、功能、字节码文件构成、运行时数据区(包括程序计数器、栈和堆、方法区)、内存溢出与JDK内存区域变化,以及类的生命周期、类加载器、垃圾回收机制和内存泄漏检测。此外,还包括了JVM的引用类型和常用垃圾回收器种类等内容。
摘要由CSDN通过智能技术生成

JVM

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


面试题

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是JVM?

1、JVM指的是Java虚拟机,本质上是一个运行在计算机上的程序,它的职责是运行Java字节码文件,作用是为了支持跨平台特性。
2、JVM的功能有三项:解释执行字节码指令;管理内存中对象的分配,完成自动的垃圾回收;优化热点代码,提升执行效率(JIT及时编译器)
在这里插入图片描述

3、JVM的组成:类加载系统、运行时数据区、执行引擎、本地接口
JVM组成部分

4、常见的JVM有orcal、openjdk提供的hotsopt,也可以选择GraalVM、龙井等

二、字节码文件的组成

  • 字节码文件本质上是一个二进制文件,需要用专业工具打开
    1、开发环境使用 jclasslib 插件打开
    2、服务器环境使用 javap-v xxx.class,命令打开
  • 组层部分:
    基本信息:(一般信息):魔数(固定四个字符coffee)、版本号(m-44得出使用编译的jdk版 本),访问标识(public final等等)、父类和接口
    常量池:保存了字符串常量、类或接口名、字段名主要在字节码指令中使用
    字段:当前类或接口声明的字段信息
    方法:当前类或接口声明的方法信息字节码指令(包含了异常表)
    属性:类的属性,比如源码的文件名、内部类的列表等
    在这里插入图片描述

三、运行时数据区

这一节内容比较重要,详情链接如下
程序计数器、栈
堆和方法区

注:Java虚拟机栈执行方法,以栈帧的形式

在这里插入图片描述

四、内存溢出

在这里插入图片描述

堆内存溢出
栈内存溢出
方法区内存溢出
直接内存溢出

五、JDK6-8内存区域的变化

在这里插入图片描述
在这里插入图片描述
字符串常量池:JDK7及之后的版本放在堆上
运行时常量池:一直放在方法区中
在这里插入图片描述
JDK6的结构
JDK7的结构
JDK8的结构
JDK8:元空间存放类的基本信息、运行时常量池

六、类的生命周期

生命周期详解
初始化阶段执行静态代码块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、类加载器

启动类加载器:加载核心类 jre/lib
扩展类加载器:加载扩展类 jre/lib/tec
应用类加载器:加载应用classpath中的类
自定义类加载器:继承ClassLoader重写findClass方法
JDK之后扩展类加载器替换成了平台类加载器
类加载器详细

八、双亲委派机制

双亲委派机制
打破双亲委派机制

九、Tomcat自定义类加载器

在这里插入图片描述

九、判断对象有没有被引用

内存泄漏:不再使用的对象在系统中未回收,可能导致内存溢出。
Java的自动垃圾回收机制 :GC机制。通过垃圾回收器来对不再使用的对象完成自动的回收,主要负责对堆上内存进行回收。

线程不共享的三部分,程序计数器,Java虚拟机栈以及本地方法栈,都是伴随着线程的创建而创建,线程的销毁而销毁,方法的栈帧会在执行完方法后自动弹出并释放掉对应的内存。不需要垃圾回收器来回收。
方法区中能回收 的内容主要就是不再使用的类,类的卸载条件较为苛刻,开发中此类场景一般很少出现,因为自定义的类由应用程序加载器进行加载,这个类加载器运行时不会被回收

一般指的是堆的回收

在这里插入图片描述

九、jvm引用类型

1、强引用(可达性算法中描述的对象引用):GC Root对象跟普通对象有引用关系,只要这层关系存在,普通对象就不会被回收。除了强引用之外,Java中还有其他几种引用方式。

2、软引用(SoftReference):相对于强引用是一种比较弱的引用关系。如果一个对象只有软引用关联到他,当内存不足时,就会将软引用中的数据进行回收。(强引用会保留)

  • 软引用常用于缓存中。
  • SoftReference对象也需要被GC Root关联到否则软引用对象本身也会被回收

3、弱引用(WeakReference):平时基本上不会使用,主要在ThreadLocal中使用。

4、虚引用(PhantomReference):不能通过虚引用对象获取到包含的对象(软、弱可通过get方法获取)。虚引用唯一的用途是当对象被垃圾回收器回收时可以接收到对应的通知
5、终结器引用:

十、threadlocal为什么要使用弱引用

在这里插入图片描述
里面有一个静态内部类,static class ThreadLocalMap,ThreadLocalMap里有entry继承了threadlocal弱引用,如果是强引用,当threadlocal不再使用,threadlocalmap的引用还保留
在这里插入图片描述

十一、常见垃圾回收算法

  • 标记-清除算法
  • 复制算法
  • 标记-整理算法
  • 分代gc

垃圾回收算法详解→

在这里插入图片描述

十二、常用的垃圾回收器种类

目前的垃圾回收算法基本都是分代GC(分代垃圾回收算法),所以垃圾回收器也是分为老年代回收器和新生代的回收器,两个组合搭配

垃圾回收器的种类详解→

在这里插入图片描述

十三、排查内存泄漏问题

内存状况查看分析

获取内存快照:1 启动程序增加jvm参数;2 在cmd根据进程导出内存快照
在这里插入图片描述
诊断内存快照:用MAT工具打开内存快照
在这里插入图片描述
修复问题
在这里插入图片描述
常用工具
在这里插入图片描述

十四、常见的JVM参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值