当前位置: 首页 > news >正文

《JVM修仙之路》初入JVM世界

《JVM修仙之路》初入JVM世界

博主目前正在学习JVM的相关知识,想以一种不同的方式记录下,娱乐一下

清晨,你睁开双眼,看到刺眼的阳光,你第一反应就是完了完了,又要迟到了。刚准备起床穿衣的你突然意识到不对,这好像不是我家呀。。。。。这是哪呀

你的名字是小王,是21世纪的一个普通程序员,过着996的生活。只是今天一睁眼,你发现你好像是穿越了。正在你迷迷瞪瞪的时候,一个和你年龄相近的小姐姐快速走进来,迅速拉起你的手,嘴里在嘟囔着,快走,再晚就赶不上J1大佬的表演了。

你心里更懵逼了,嘛是J1,还没等你问出这个问题,你们就已经到了表演现场。

台上表演的人时而吐出火焰,时而生成玄冰,台下传来阵阵的欢呼。这时的你更加笃定了穿越的想法。你转头问向小美,台上这些人是怎么做到的。小美苦笑一声,随后应道我也不清楚,这也是我第一次见到这些大佬现场表演。这时一位白发苍苍的老人开口道,这是因为他们的JVM中的内力足够深厚。
在这里插入图片描述
听到JVM这三字母的时候,你一下子懵逼了,心里想,嘛玩意,穿个越还离不开这东西,回忆着穿越前学这玩意学的恶心,面试完全还回去了。你转头看向老人,只见老人虽已两鬓斑白,但仍站得笔直,眼神中透漏着一股坚毅,一袭白衫,给人一种世外高人的感觉。你接着问,那我们普通人可以像他们这样吗?老人点点头道,可以是可以,不过要受常人所不能承受之苦。老人接着说,普通人因为内力太少,只可支撑一个本地方法栈,(java语言实现的方法有局限,对于一些底层的功能需要借助与C或C++实现的方法来实现,这些方法就称为本地方法,而为其方法运行时提供内存空间的部件就称为本地方法栈)只能支撑我们的日常生活。而台上这些J2的人已经将内力提升到更高层次的境界,从而可以生成火焰和玄冰。其主要原因就是他们JVM中拥有了虚拟机栈程序计数器

为了证实心中的想法,你再次问向老人,这俩是什么?你疑惑的看向老人。老人缓缓答道,虚拟机栈就是存储供这些技能消耗的内力的容器,并且会为每一个正在释放的技能单独分配一部分内力,其他技能就算内力释放完了,就不能侵占该技能的内力,这样将不同技能需要的内力分割出来可以避免走火入魔(内力就是内存,一个技能就是一个线程,正在释放的技能就是正在运行的方法,走火入魔就是线程不安全),并且技能释放完毕之后,该技能占用的内力可以在一段时间内返回。

你听完之后,进一步证实心中的想法,这里的技能机制和JVM是相似的。技能对应一个线程,内力就对应给该线程分配的内存。
在这里插入图片描述

你接着问,那这个程序计数器是干啥的,老者长吁一口气,想着,你这小子没完了,问个没完了。老者无奈的摇了摇头,然后说,这个我也不清楚,你有兴趣的话可以去极地剋哪里看看,可能有人可以解答你的疑问。看出了老者的不耐烦,你也只好扭过头去看台上大佬的表演。

在看了一会表演之后,你就和小美一起回去了,一整晚你都在琢磨,怎么让自己内力增加,进而拥有虚拟机栈和程序计数器,另外极地剋在哪里。

第二天一早,天才蒙蒙亮,你家的门被一脚踹开,这巨大的声响直接把你吓醒,等你朦朦胧胧中缓过神后,才看出这是小美。小美开口道,我知道极地剋在哪了。听到这你可就不困了,随便穿上衣服就让小美带着你去极地剋了。

一路上的风景变化很大,河流逐渐增多,并且越靠近极地剋,水中的鱼越多,越欢快。在经过了两天半的赶路之后,你们终于到了极地剋的大门前。

门是虚掩的,你和小美悄悄溜了进去,正进入,就看见一个人在熟练释放着技能,不同的是他们可以在释放一个技能的途中,可以停止释放另一个技能,而后又可以接着释放上一个技能。你看着其中一个人首先释放了一块寒冰之后,随后又吐出了一团火焰,两种强大的技能一结合,突然亮起白光,然后变成了水蒸气。
在这里插入图片描述
你心里想,属实大聪明。就在这时练功的这位大佬,发现了你俩,大吼一声,来者何人。

你赶忙解释出你来的目的,交流之后,这位大佬就给你解答了程序计数器的作用,其实程序计数器的作用就是记录技能的释放到哪一步了,并且每一个技能都会有一个单独的程序计数器,可以记录释放技能时下一步要干啥,并且可以使得在不同的技能之间切换时可以准确的接上下一步要干啥。另外,为了释放技能的准确性,我们会将一个技能又划分为不同的方法,每一个方法占用虚拟机栈的一部分空间,依次进行执行。

这时,你明白了,这就是为啥它可以释放出水蒸气的原因了。

这时,作为好奇宝宝的你,想问一下怎么才能提升自己的内力,大佬微微一笑,看向山下的河流

在这里插入图片描述

==============================================================================
内容中可能存在错误,希望大佬们指正,如果有好玩的想法的话,欢迎大家一起交流交流
在这里插入图片描述

相关文章:

《JVM修仙之路》初入JVM世界

《JVM修仙之路》初入JVM世界 博主目前正在学习JVM的相关知识,想以一种不同的方式记录下,娱乐一下 清晨,你睁开双眼,看到刺眼的阳光,你第一反应就是完了完了,又要迟到了。刚准备起床穿衣的你突然意识到不对&…...

苍穹外卖 day1 搭建成功环境

引入 idea找不到打包生成的文件目录怎么办,首先点击这个小齿轮 show ecluded files然后就能找到隐藏的文件 这个jar包内含tomcat,可以直接丢在linux上用 开发环境:开发人员在开发阶段使用的环境,一般外部用户无法访问 测试环…...

智能主体按照功能划分

(1) 构件接口主体 构件接口主体提供构件与用户之间的接口。当一个用户通过代理主体向 元组空间提出申请,并找到相匹配的构件主体时,此构件主体会将其所在构件主体 组中的构件接口主体通过申请用户的代理主体传送到用户的界面。 (2) 构件主体 通过构…...

python中的matplotlib画折线图(数据分析与可视化)

先导包(必须安装了numpy 、pandas 和matplotlib才能导包): import numpy as np import pandas as pd import matplotlib.pyplot as plt核心代码: import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.se…...

大数据数据仓库

一.在线教育 1.数据采集 1.数仓概念 数据仓库是为企业制定决策,提供数据支持的。数据采集和存储、对数据进行计算和分析 2.项目架构 2.数据分类 业务数据 用户行为数据 爬虫数据 2.离线数仓 3.实时数仓...

Java“牵手“速卖通商品详情页面数据获取方法,速卖通API实现批量商品数据抓取示例

速卖通商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取速卖通商品详情数据,您可以通过开放平台的接口或者直接访问速卖通商城的网页来获取商品详情信息。以下是两种常用方法的介绍:…...

【Git】代码误推送还原(真实项目环境,非纸上谈兵)

背景 RT, 我今天眼睛花了,不小心把工作分支【合并】到了一个不相干的功能分支上,并且代码已经推送到远程仓库了。于是,只能尝试还原到上一次提交中。 【合并】分支有一个点我们是不可避免的,文字很难描述,…...

CPU 飙升?这3大场景助你精准定位

1 常用的 Load 分析方法 CPU高、Load高 通过 top 命令查找占用CPU最高的进程PID; 通过top -Hp PID查找占用CPU最高的线程TID; 对于java程序,使用jstack打印线程堆栈信息; 通过printf %x tid打印出最消耗CPU线程的十六进制; …...

6、Spring_Junit与JdbcTemplate整合

Spring 整合 1.Spring 整合 Junit 1.1新建项目结构 1.2导入依赖 导入 junit 与 Spring 依赖 <!-- 添加 spring 依赖--> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version…...

Redis是如何保证高可用的?

Redis这种基于内存的关系型数据库我们在选用的时候就是考虑到它的快。而且可以很方便的实现诸如分布式锁、消息队列等功能。 笔者在前一段秋招面试的时候就被提问&#xff0c;“Redis是怎么保证高可用的&#xff1f;” 后续的子问题包含&#xff0c;集群模式是怎么实现的&…...

精益求精:通付盾安卓应用加固升级,为移动安全保驾护航!

在如今竞争激烈的移动应用领域&#xff0c;保障应用资源的安全性成为刻不容缓的任务。最近&#xff0c;通付盾针对资源加密方案进行了全面升级&#xff0c;大幅增强了其兼容性&#xff0c;实现了更全面的资源文件类型保护。这次升级为移动应用的安全性和稳定性迈出了坚实的一步…...

javaweb01-html、css基础

话不多说&#xff0c;先来一张泳装板鸭镇楼 接上一开篇&#xff0c; 首战以web的三大基石开头&#xff08;html、css、js&#xff09;&#xff0c;js内容比较多&#xff0c;下一序章讲解&#xff0c;这一章节主要以html和css为主。 目录 一、初始web前端 二、HTML标签结构 三、…...

牛客复盘] 2023河南萌新联赛第(七)场:信息工程大学 B\I 20230823

牛客复盘] 2023河南萌新联赛第&#xff08;七&#xff09;场&#xff1a;信息工程大学 B\I 20230823 总结B 七夕1. 题目描述2. 思路分析3. 代码实现 I 细胞分裂1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 场外OB做了B和I题&#xff0c;只能说这场有点离谱。B 并查…...

使用PyMuPDF添加PDF水印

使用Python添加PDF水印的博客文章。 C:\pythoncode\new\pdfwatermark.py 使用Python在PDF中添加水印 在日常工作中&#xff0c;我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印&#xff0c;以保护文件的版权或标识文件的来源。本文将介绍如何使用Py…...

window如何实时刷新日志文件

1 安装windows git 下载地址&#xff1a;Git - Downloading Package (git-scm.com) 2 打开git bash 输入tail.exe -f 日志文件路径...

动态代理的两个使用方式(手动实现+SpringAOP实现)-Demo

一、手动实现 1、具体代码 package com.xch.proxy;/*** 具体业务接口** author XuChenghe* date 2023/8/18 15:09*/ public interface Star {/*** 唱歌方法** param name* return*/String sing(String name);/*** 跳舞方法*/void dance();} package com.xch.proxy;/*** 具体…...

面试话术(MQ+mybatis+nginx+redis+ssm+mysql+linux)

面试话术 RabbitMq1、介绍一下rabbitmq2、如何保证消息确定消息发送成功&#xff0c;并且被消费成功&#xff0c;有什么保障措施3、如何保证消息不被重复消费4、RabbitMQ 宕机了怎么处理 授权话术1、你给我说一下授权认证&#xff08;登陆注册&#xff09;的逻辑2、说一下jwt3、…...

JSON的理解

文章目录 1、什么是JSON2、为什么要用JSON3、JSON的格式规定3.1 对象&#xff08;0bject)&#xff1a;对应着JS中的对象3.2 数组&#xff08;Array&#xff09;&#xff1a;对应着JS中的数组形式3.3 简单形式&#xff1a;对应着JS中的基础数据类型 4、JSON和Js的转换5、JSON对象…...

面试热题(二叉树的最大路径)

路径 被定义为一条从树中任意节点出发&#xff0c;沿父节点-子节点连接&#xff0c;达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给定一个二叉树的根节点 root…...

C#设计模式之--六大原则 开闭原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守&#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内&#xff0c;努为做到一个良好的设计。本文主要介绍一下.NET(C#)…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...