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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
博客园 - 【当耐特】
小众软件
小众软件
博客园 - Franky
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
雷峰网
雷峰网
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
S
Security @ Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Y
Y Combinator Blog
O
OpenAI News
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
Cloudbric
Cloudbric

博客园 - 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)的线程