惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
B
Blog
WordPress大学
WordPress大学
Project Zero
Project Zero
P
Palo Alto Networks Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
T
Tailwind CSS Blog
Forbes - Security
Forbes - Security
F
Full Disclosure
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News: Ask HN
Hacker News: Ask HN
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
G
Google Developers Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
O
OpenAI News
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
IT之家
IT之家
U
Unit 42
腾讯CDC
S
Security Affairs
C
Cisco Blogs
Schneier on Security
Schneier on Security
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss

博客园 - Neonuu

解决ollama官方下载过慢的问题(包含windows和linux) 使用java 命令运行包含main方法的class文件时,报 Error: Could not find or load main class Test Java8 list.stream()常用方法 IDEA整合SVN VUE,编辑详情时,列表数据也跟着改变 VUE二级联动,改变一级下拉框,清空二级下拉框 MySQL面试题 Linux服务器安装MariaDB数据库 jar包解压后,修改完配置文件,再还原成jar包 Java获取resources文件夹下properties配置文件 Java中synchronized,wait(),notify() Java中Runnable和Thread的区别(网上部分说法是错误的) Java中如何实现一个接口拥有多个实现类 JPA中getOne与findOne try catch与spring的事务回滚 Spring主动触发事务回滚 Redis五种数据类型及应用场景 Java面试题 SQL HAVING用法详解 const,var,let区别
JVM原理
Neonuu · 2024-03-06 · via 博客园 - Neonuu

一、概念

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

首先一次编译处处运行是学习Java语言都知道的事情,其实并不是Java语言跨平台,是JVM跨平台,Jvm运行时并不是执行Java文件,而是执行编译后的.class文件。

字节码文件即JVM可以识别并执行的二进制文件,不同的编程语言经过编译器编译处理之后,转换成统一的字节码规范文件,这样JVM就可以执行。

跨平台的特性即JVM虚拟机可以运行在不同的计算机系统上,例如经常使用的Linux系统,MacOS系统,Win系统,一次编译,处处运行就是这样理解的。

二、结构

1、类加载器:类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件,类加载器负责读取字节代码,并转换成java.lang.Class类的一个实例。

2、运行时数据区(内存模型)

    2.1、堆:存储对象。垃圾回收机制(GC)。

    2.2、栈:

        2.2.1、局部变量表

        2.2.2、操作数栈

        2.2.3、动态链接:将符号引用转换为直接引用

        2.2.4、方法出口

    2.3、本地方法栈:为 JVM 运行 Native 方法准备的空间,由于很多 Native 方法都是用 C 语言实现的,所以它通常又叫 C 栈。

    2.4、方法区(元空间):存储类信息、常量、静态变量。

    2.5、程序计数器:相对较小的一块内存空间,作用可以理解是当前线程所执行的字节码的行号+1的指示器,记录当前线程执行到哪一行代码。(随着程序的运行,由字节码执行引擎动态修改)

3、字节码执行引擎:Java虚拟机最核心的组成部分,输入的是字节码,处理过程是字节码解析,输出执行结果。

三、垃圾回收(GC)

1、结构:

堆内部由年轻代(1/3)和老年代(2/3)组成。

年轻代由eden区和survivor(s0/s1)区组成。

minor GC对年轻代进行垃圾收集,full GC对整个堆进行垃圾收集。

2、垃圾收集底层如何实现的?

由字节码执行引擎开启垃圾收集线程。

可达性分析算法:将GC Roots对象作为起点,从这些节点乡下搜索引用的对象,找到的对象都标记为非垃圾对象,其余为垃圾对象。

GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等。

3、JVM调优工具(阿里巴巴Arthas)

Arthas是阿里巴巴在2018年9月开源的Java诊断工具。

3.1、下载好jar包后,使用“java -jar arthas-boot.jar”命令启动

3.2、选择想要监控的程序,输入其序号

3.3、使用“dashboard”命令查看

3.4、使用“thread id”查看异常(如cpu站比高,状态一直为blocked)的线程