-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1 lines (1 loc) · 35.7 KB
/
index.html
File metadata and controls
1 lines (1 loc) · 35.7 KB
1
<!DOCTYPE html><html lang=zh-CN data-theme=light><head><meta charset=UTF-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,viewport-fit=cover"><title>Juzzia's Blog - 博客站</title><meta name=author content=Juzzia><meta name=copyright content=Juzzia><meta name=format-detection content="telephone=no"><meta name=theme-color content=ffffff><meta name=description content=分享技术,开发经验,学习总结><meta property=og:type content=website><meta property=og:title content="Juzzia's Blog"><meta property=og:url content=https://juzzia.github.io/index.html><meta property=og:site_name content="Juzzia's Blog"><meta property=og:description content=分享技术,开发经验,学习总结><meta property=og:locale content=zh_CN><meta property=og:image content=https://juzzia.github.io/img/avatar.jpg><meta property=article:author content=Juzzia><meta name=twitter:card content=summary><meta name=twitter:image content=https://juzzia.github.io/img/avatar.jpg><link rel="shortcut icon" href=/img/log.svg><link rel=canonical href=https://juzzia.github.io/index.html><link rel=preconnect href=//cdn.jsdelivr.net><link rel=preconnect href=//hm.baidu.com><link rel=preconnect href=//busuanzi.ibruce.info><meta name=msvalidate.01 content=606EBFCBDED9F21417F108AFF320F465><link rel=stylesheet href="/css/index.css?v=4.13.0"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.1/css/all.min.css><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.33/dist/fancybox/fancybox.min.css media=print onload='this.media="all"'><script>var _hmt=_hmt||[];(()=>{var e=document.createElement("script"),t=(e.src="https://hm.baidu.com/hm.js?344a26e9d7e5894ce499ae53b475d975",document.getElementsByTagName("script")[0]);t.parentNode.insertBefore(e,t)})()</script><script>let GLOBAL_CONFIG={root:"/",algolia:void 0,localSearch:{path:"/search.xml",preload:!1,top_n_per_article:5,unescape:!1,languages:{hits_empty:"找不到您查询的内容:${query}",hits_stats:"共找到 ${hits} 篇文章"}},translate:void 0,noticeOutdate:void 0,highlight:{plugin:"prismjs",highlightCopy:!0,highlightLang:!0,highlightHeightLimit:300},copy:{success:"复制成功",error:"复制错误",noSupport:"浏览器不支持"},relativeDate:{homepage:!0,post:!1},runtime:"",dateSuffix:{just:"刚刚",min:"分钟前",hour:"小时前",day:"天前",month:"个月前"},copyright:void 0,lightbox:"fancybox",Snackbar:void 0,infinitegrid:{js:"https://cdn.jsdelivr.net/npm/@egjs/infinitegrid@4.11.1/dist/infinitegrid.min.js",buttonText:"加载更多"},isPhotoFigcaption:!0,islazyload:!1,isAnchor:!0,percent:{toc:!0,rightside:!0},autoDarkmode:!1}</script><script id=config-diff>var GLOBAL_CONFIG_SITE={title:"Juzzia's Blog",isPost:!1,isHome:!0,isHighlightShrink:!1,isToc:!1,postUpdate:"2025-03-14 09:19:09"}</script><script>(e=>{e.saveToLocal={set:(e,t,a)=>{var o;0!==a&&(o=Date.now(),localStorage.setItem(e,JSON.stringify({value:t,expiry:o+864e5*a})))},get:e=>{var t=localStorage.getItem(e);if(t){t=JSON.parse(t);if(!(Date.now()>t.expiry))return t.value;localStorage.removeItem(e)}}},e.getScript=(o,n={})=>new Promise((t,e)=>{let a=document.createElement("script");a.src=o,a.async=!0,a.onerror=e,a.onload=a.onreadystatechange=function(){var e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(a.onload=a.onreadystatechange=null,t())},Object.keys(n).forEach(e=>{a.setAttribute(e,n[e])}),document.head.appendChild(a)}),e.getCSS=(o,n=!1)=>new Promise((t,e)=>{let a=document.createElement("link");a.rel="stylesheet",a.href=o,n&&(a.id=n),a.onerror=e,a.onload=a.onreadystatechange=function(){var e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(a.onload=a.onreadystatechange=null,t())},document.head.appendChild(a)}),e.activateDarkMode=()=>{document.documentElement.setAttribute("data-theme","dark"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","#0d0d0d")},e.activateLightMode=()=>{document.documentElement.setAttribute("data-theme","light"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","ffffff")};e=saveToLocal.get("theme"),"dark"===e?activateDarkMode():"light"===e&&activateLightMode(),e=saveToLocal.get("aside-status");void 0!==e&&("hide"===e?document.documentElement.classList.add("hide-aside"):document.documentElement.classList.remove("hide-aside"));/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)&&document.documentElement.classList.add("apple")})(window)</script><link rel=stylesheet href=/css/callout/callout_blocks.css><link rel=stylesheet href=/css/mermaid.css><link rel=stylesheet href=/css/custom.css><meta name=generator content="Hexo 7.3.0"></head><body><div id=web_bg></div><div id=sidebar><div id=menu-mask></div><div id=sidebar-menus><div class="avatar-img is-center"><img src=/img/avatar.jpg onerror='onerror=null,src="/img/friend_404.gif"' alt=avatar></div><div class="sidebar-site-data site-data is-center"><a href=/archives/ ><div class=headline>文章</div><div class=length-num>10</div></a><a href=/tags/ ><div class=headline>标签</div><div class=length-num>4</div></a><a href=/categories/ ><div class=headline>分类</div><div class=length-num>5</div></a></div><hr class=custom-hr><div class=menus_items><div class=menus_item><a class=site-page href=/ ><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class=menus_item><a class=site-page href=/archives/ ><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class=menus_item><a class=site-page href=/tags/ ><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class=menus_item><a class=site-page href=/categories/ ><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class=menus_item><a class=site-page href=/about/ ><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class=page id=body-wrap><header class=full_page id=page-header style=background-image:url(https://s2.loli.net/2024/08/01/dvlsrBzaF8SUJ64.png)><nav id=nav><span id=blog-info><a href=/ title="Juzzia's Blog"><span class=site-name>Juzzia's Blog</span></a></span><div id=menus><div id=search-button><a class="site-page social-icon search" href=javascript:void(0);><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class=menus_items><div class=menus_item><a class=site-page href=/ ><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class=menus_item><a class=site-page href=/archives/ ><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class=menus_item><a class=site-page href=/tags/ ><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class=menus_item><a class=site-page href=/categories/ ><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class=menus_item><a class=site-page href=/about/ ><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id=toggle-menu><a class=site-page href=javascript:void(0);><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id=site-info><h1 id=site-title>Juzzia's Blog</h1><div id=site_social_icons><a class=social-icon href=https://github.com/juzzia target=_blank title=Github><i class="fab fa-github" style=color:#24292e></i></a><a class=social-icon href=mailto:juzzia@github.com target=_blank title=Email><i class="fas fa-envelope" style=color:#4a7dbe></i></a></div></div><div id=scroll-down><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class=layout id=content-inner><div class=recent-posts id=recent-posts><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/1fe4afce.html title="字节码指令执行过程 BytecodeInterpreter">字节码指令执行过程 BytecodeInterpreter</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-03-07T13:34:00.000Z title="发表于 2025-03-07 21:34:00">2025-03-07</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span><span class="article-meta tags"><span class=article-meta-separator>|</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/%E6%BA%90%E7%A0%81/ >源码</a><span class=article-meta-link>•</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/JVM/ >JVM</a></span></div><div class=content></div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/1a5fbe08.html title=CPU缓存与MESI协议>CPU缓存与MESI协议</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-03-04T12:42:00.000Z title="发表于 2025-03-04 20:42:00">2025-03-04</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/CS/ >CS</a></span><span class="article-meta tags"><span class=article-meta-separator>|</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/cpu/ >cpu</a><span class=article-meta-link>•</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/CS/ >CS</a></span></div><div class=content>引言</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/bcc098b4.html title="Liunx 任务调度">Liunx 任务调度</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-24T13:52:00.000Z title="发表于 2025-02-24 21:52:00">2025-02-24</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/liunx/ >liunx</a></span></div><div class=content></div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/991d833e.html title="Liunx Futex">Liunx Futex</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-22T15:33:00.000Z title="发表于 2025-02-22 23:33:00">2025-02-22</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/liunx/ >liunx</a></span></div><div class=content>背景 写这篇的文章的原因是因为在研究 java 的重量级锁中用到了 pthred_mutex_t作为互斥锁,pthred_mutex_t中加锁函数pthread_mutex_lock当竞争锁失败时便会通过系统调用futex_wait将当前线程阻塞等待到其内部的条件变量__lock上,设置线程的状态为INTERRUPTABLE,当使用解锁函数pthread_mutex_unlock时便会将__lock的值改变为0,然后通过系统调用futex_wake唤醒阻塞等待在条件变量__lock上的线程,将线程的状态改为可运行状态,当然,上面的流程是看完futex的源码后总结的一个大概的流程,为了搞清楚pthread_mutex_lock和pthread_mutex_unlock做了什么,我只能深究源码,解答心中疑惑 锁 在介绍futex之前,我想先在java层面去介绍为什么不在用户态去实现自己的锁机制,这样就能够避免由于系统调用导致线程上下文切换的开销,因为我在深究源码的过程中也出现了类似的疑惑,搜寻了很多博客以及AI但是并未给出我想要的回答,当看懂了futex的源码后我才懂了为什么不这样做, ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/f95e72b6.html title="字节码解释器 Interpreter">字节码解释器 Interpreter</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-18T14:45:00.000Z title="发表于 2025-02-18 22:45:00">2025-02-18</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span><span class="article-meta tags"><span class=article-meta-separator>|</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/%E6%BA%90%E7%A0%81/ >源码</a><span class=article-meta-link>•</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/JVM/ >JVM</a></span></div><div class=content>半亩方塘一鉴开,天光云影共徘徊。 问渠那得清如许?为有源头活水来。 介绍 在计算机的世界中,如果又无法解决的问题,那么只需要加一个中间层,本文所介绍的解释器同样是遵循这个思想 当我们的java代码通过编译器编译成为字节码后,此时就可以被jvm加载到内存中去解释执行了,为了支持跨平台,JVM会根据不同的硬件平台开发一个专属的解释器用于将字节码指令翻译成为对应平台的机器指令,或者采用一个通用的解释器作为中间层来解释字节码指令然后执行对应的逻辑。 Hotspot中的实现 Interpreter Hotspot是jvm的实现之一,在jdk8u中的Hotspot中有以下两个解释器 cppInterpreter:CppInterpreter是用C实现的字节码解释器,对每一个字节码指令都编写了c方法来进行处理,优点是实现相对简单容易理解,缺点就是执行慢 TemplateInterpreter:TemplateInterpreter实现的模板解释器,它对每一个字节码指令都对应了一段汇编代码来实现,启动时会将字节码指令与对应的汇编代码入口做绑定,当执行到一条字节码指令时会进入对应的汇编代码入 ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/48bea92d.html title=Hotspot源码剖析Java方法执行流程>Hotspot源码剖析Java方法执行流程</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-18T01:09:00.000Z title="发表于 2025-02-18 09:09:00">2025-02-18</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span></div><div class=content>1. 背景 在学习JMM的过程中产生了对想探索栈帧内存分配的底层原理的想法,故此写下这篇博客以梳理和学习hotspot虚拟机是如何执行java方法并且分配栈帧空间的 本篇博客是基于Hotspot的 CppInterpreter.cpp[^1] 所编写的,其他基于硬件架构而开发的汇编代码让人晦涩难懂,不过原理都一样的,所以无需纠结 2. 相关概念 特殊寄存器 sp(stack pointer): 栈顶指针,每个线程都会有私有的栈,而这个指针指向线程栈的顶部,压栈出栈都依靠此指针的移动 fp(frame pointer):栈帧指针,jvm会给每个调用的方法分配一个栈帧,用于存储方法的局部变量,参数和返回地址等,而这个指针指向栈帧的起始地址 bcp(byte code poiniter):字节码指针,存储当前执行的Java字节码指令的位置,每执行完当前指令,就会更新为下一条要执行的字节码指令的位置 pc(program counter pointer):程序计数器,用于存储下一条即将要执行的指令的内存地址 注意与上面的bcp是不同的作用,pc是cpu所使用的,而bcp是jvm所 ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/cff6dd61.html title=JMM>JMM</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-15T18:17:00.000Z title="发表于 2025-02-16 02:17:00">2025-02-16</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span></div><div class=content>引言 在Java这个世界中,如果把JVM比作一个运行java代码的生态土壤,那么JMM就是Java中的生态法则,它规定了这个世界的运行规则,定义了线程本地的变量读取存储,多线程之间的变量共享规则,并屏蔽了底层不同cpu架构,系统之间的差别,我们只需要遵守规范便可以开发出稳定可靠的单/多线程应用 介绍 JMM(Java Memory Model):是 Java 语言规范定义的一组规则,用于协调多线程之间的内存访问操作,保证多线程程序在不同的硬件和操作系统平台上都能正确地执行。下面从几个方面对 JMM 进行完整的描述: 基本概念 主内存 (Main Memory): 主内存是所有线程共享的内存区域,它存储了Java的对象,静态变量,类信息,常量池信息 工作内存(Working Memory): 每个线程都有自己独立的工作内存,它是线程私有的,线程在执行过程中,会将主内存的数据拷贝到自己的工作内存,操作完成后再将结果写回主内存 定义上面的概念是解决不同平台以及不同硬件架构下的内存交互约束,在具体实现上主内存可以看作是RAM,而工作内存看作是寄存器,CPU缓存以及局部变量表(这个是栈帧 ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/6961ed95.html title="JVM Atomic源码解析">JVM Atomic源码解析</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2025-02-15T18:16:00.000Z title="发表于 2025-02-16 02:16:00">2025-02-16</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span><span class="article-meta tags"><span class=article-meta-separator>|</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/%E6%BA%90%E7%A0%81/ >源码</a><span class=article-meta-link>•</span><i class="fas fa-tag"></i><a class=article-meta__tags href=/tags/JVM/ >JVM</a></span></div><div class=content>引言 在日常工作的过程中,常常会使用到一些共享变量来监控某些指标,比如IM系统中为了保证服务端转发消息给客户端时的消息服务质量,我借鉴了TCP的超时重传机制,当通过channel将消息推送给客户端后,达到一定的时间,服务端还没有收到客户端对该消息的ack消息,那么就认为该消息丢失,会触发重传,为了能够掌握某个节点的消息质量情况和超时重传队列的长度,我对重传的次数以及队列的长度都使用了Metrics进行监控,而为了确保在多线程环境下累加重传的次数的线程安全性,我采用了AtomicLong用来计算重传次数计数,AtomicLong称为原子变量,内部利用CAS指令自旋的方式来完成值的比较和更新,确保了操作的线程安全,但是其底层是如何保证的呢,保留疑问,跟随本文寻找答案 AtomicLong 首先通过阅读Java层面的AtomicLong的源码,了解下它的自增实现 public class AtomicLong extends Number implements java.io.Serializable { // setup to use Unsafe.compareAn ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/7e818be6.html title=记录一次排查因线程WAITING导致应用假死的经历>记录一次排查因线程WAITING导致应用假死的经历</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2024-10-15T18:27:00.000Z title="发表于 2024-10-16 02:27:00">2024-10-16</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E5%B7%A5%E4%BD%9Clog/ >工作log</a></span></div><div class=content>背景 在一个阳光明媚的下午,我正在悠哉游哉的在工位上畅游网络世界(摸鱼 😃 ),忽然心里有点不好的预感,果然哈,企业微信里产品经理弹了一条消息给我说测试服务器的系统登录进去获取不到菜单,我随即连接到测试服务器,心想这种问题重新运行下应该就没事了,到系统管理后台目录重新跑下 start.sh 脚本,想不到,竟然也被这问题折腾了一个小时,因此记录一下排查过程 过程 当重新运行了start.sh脚本后,系统正常运行成功,但是过一会就立马又是卡死状态,我打开浏览器登录进入系统,f12打开控制台看到获取菜单的请求一直在加载中,没有拿到响应,使用 tail 命令查看日志信息,请求日志和响应的日志信息也都能够正常输出 心想这是什么玩意,响应也返回了为什么会卡死呢,猜测是不是网关出了问题,随即又去排查网关的日志,发现只输出了请求的日志,没有输出响应的日志,难道是网关的问题吗,随即remote debug网关服务(测试服务器在本地机房,为了方便调试开启了remote debug),将断点打在了 NettyRoutingFilter#filter 方法中(NettyRoutingFilter是最终 ...</div></div></div><div class=recent-post-item><div class="recent-post-info no-cover"><a class=article-title href=/posts/09618d5b.html title="Liunx编译OpenJdk 8U">Liunx编译OpenJdk 8U</a><div class=article-meta-wrap><span class=post-meta-date><i class="far fa-calendar-alt"></i><span class=article-meta-label>发表于</span><time datetime=2024-07-20T05:32:00.000Z title="发表于 2024-07-20 13:32:00">2024-07-20</time></span><span class=article-meta><span class=article-meta-separator>|</span><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ >源码分析</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class=article-meta__categories href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ >hotspot</a></span></div><div class=content>古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。 背景 在学习openjdk 8u源码时,对于CppInterpreter栈帧中局部变量表的分配始终疑惑不解,只能来调试源码来获得答案,因此有了这篇博客 本机环境 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy 架构: x86_64 CPU 运行模式: 32-bit, 64-bit 流程 下载 open jdk 7u 编译某个版本的jdk需要用前一个版本来指定为为bootjdk,所以编译jdk8u需要使用jdk7u作为bootjdk来编译 通过Java Archive Downloads - Java SE 7链接可以下载jdk7 配置环境变量 修改 sudo vim /etc/profile # ...</div></div></div><nav id=pagination><div class=pagination><span class="page-number current">1</span></div></nav></div><div class=aside-content id=aside-content><div class="card-widget card-info"><div class=is-center><div class=avatar-img><img src=/img/avatar.jpg onerror='this.onerror=null,this.src="/img/friend_404.gif"' alt=avatar></div><div class=author-info__name>Juzzia</div><div class=author-info__description>分享技术,开发经验,学习总结</div></div><div class="card-info-data site-data is-center"><a href=/archives/ ><div class=headline>文章</div><div class=length-num>10</div></a><a href=/tags/ ><div class=headline>标签</div><div class=length-num>4</div></a><a href=/categories/ ><div class=headline>分类</div><div class=length-num>5</div></a></div><a id=card-info-btn target=_blank rel=noopener href=https://github.com/juzzia><i class="fab fa-github"></i><span>github</span></a><div class="card-info-social-icons is-center"><a class=social-icon href=https://github.com/juzzia target=_blank title=Github><i class="fab fa-github" style=color:#24292e></i></a><a class=social-icon href=mailto:juzzia@github.com target=_blank title=Email><i class="fas fa-envelope" style=color:#4a7dbe></i></a></div></div><div class=sticky_layout><div class="card-widget card-recent-post"><div class=item-headline><i class="fas fa-history"></i><span>最新文章</span></div><div class=aside-list><div class="aside-list-item no-cover"><div class=content><a class=title href=/posts/1fe4afce.html title="字节码指令执行过程 BytecodeInterpreter">字节码指令执行过程 BytecodeInterpreter</a><time datetime=2025-03-07T13:34:00.000Z title="发表于 2025-03-07 21:34:00">2025-03-07</time></div></div><div class="aside-list-item no-cover"><div class=content><a class=title href=/posts/1a5fbe08.html title=CPU缓存与MESI协议>CPU缓存与MESI协议</a><time datetime=2025-03-04T12:42:00.000Z title="发表于 2025-03-04 20:42:00">2025-03-04</time></div></div><div class="aside-list-item no-cover"><div class=content><a class=title href=/posts/bcc098b4.html title="Liunx 任务调度">Liunx 任务调度</a><time datetime=2025-02-24T13:52:00.000Z title="发表于 2025-02-24 21:52:00">2025-02-24</time></div></div><div class="aside-list-item no-cover"><div class=content><a class=title href=/posts/991d833e.html title="Liunx Futex">Liunx Futex</a><time datetime=2025-02-22T15:33:00.000Z title="发表于 2025-02-22 23:33:00">2025-02-22</time></div></div><div class="aside-list-item no-cover"><div class=content><a class=title href=/posts/f95e72b6.html title="字节码解释器 Interpreter">字节码解释器 Interpreter</a><time datetime=2025-02-18T14:45:00.000Z title="发表于 2025-02-18 22:45:00">2025-02-18</time></div></div></div></div><div class="card-widget card-categories"><div class=item-headline><i class="fas fa-folder-open"></i> <span>分类</span></div><ul class=card-category-list id=aside-cat-list><li class=card-category-list-item><a class=card-category-list-link href=/categories/CS/ ><span class=card-category-list-name>CS</span><span class=card-category-list-count>1</span></a></li><li class=card-category-list-item><a class=card-category-list-link href=/categories/%E5%B7%A5%E4%BD%9Clog/ ><span class=card-category-list-name>工作log</span><span class=card-category-list-count>1</span></a></li><li class=card-category-list-item><a class=card-category-list-link href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ ><span class=card-category-list-name>源码分析</span><span class=card-category-list-count>8</span></a><ul class="card-category-list child"><li class=card-category-list-item><a class=card-category-list-link href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/hotspot/ ><span class=card-category-list-name>hotspot</span><span class=card-category-list-count>6</span></a></li><li class=card-category-list-item><a class=card-category-list-link href=/categories/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/liunx/ ><span class=card-category-list-name>liunx</span><span class=card-category-list-count>2</span></a></li></ul></li></ul></div><div class="card-widget card-tags"><div class=item-headline><i class="fas fa-tags"></i><span>标签</span></div><div class=card-tag-cloud><a href=/tags/%E6%BA%90%E7%A0%81/ style=font-size:1.5em;color:#007bff>源码</a> <a href=/tags/CS/ style=font-size:1.1em;color:#007bff>CS</a> <a href=/tags/JVM/ style=font-size:1.5em;color:#007bff>JVM</a> <a href=/tags/cpu/ style=font-size:1.1em;color:#007bff>cpu</a></div></div><div class="card-widget card-archives"><div class=item-headline><i class="fas fa-archive"></i><span>归档</span></div><ul class=card-archive-list><li class=card-archive-list-item><a class=card-archive-list-link href=/archives/2025/03/ ><span class=card-archive-list-date>三月 2025</span><span class=card-archive-list-count>2</span></a></li><li class=card-archive-list-item><a class=card-archive-list-link href=/archives/2025/02/ ><span class=card-archive-list-date>二月 2025</span><span class=card-archive-list-count>6</span></a></li><li class=card-archive-list-item><a class=card-archive-list-link href=/archives/2024/10/ ><span class=card-archive-list-date>十月 2024</span><span class=card-archive-list-count>1</span></a></li><li class=card-archive-list-item><a class=card-archive-list-link href=/archives/2024/07/ ><span class=card-archive-list-date>七月 2024</span><span class=card-archive-list-count>1</span></a></li></ul></div><div class="card-widget card-webinfo"><div class=item-headline><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class=webinfo><div class=webinfo-item><div class=item-name>文章数目 :</div><div class=item-count>10</div></div><div class=webinfo-item><div class=item-name>本站总字数 :</div><div class=item-count>24.2k</div></div><div class=webinfo-item><div class=item-name>本站访客数 :</div><div class=item-count id=busuanzi_value_site_uv><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class=webinfo-item><div class=item-name>本站总访问量 :</div><div class=item-count id=busuanzi_value_site_pv><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class=webinfo-item><div class=item-name>最后更新时间 :</div><div class=item-count id=last-push-date data-lastpushdate=2025-03-14T01:19:09.439Z><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main></div><div id=rightside><div id=rightside-config-hide><button id=darkmode type=button title=浅色和深色模式转换><i class="fas fa-adjust"></i></button><button id=hide-aside-btn type=button title=单栏和双栏切换><i class="fas fa-arrows-alt-h"></i></button></div><div id=rightside-config-show><button id=rightside-config type=button title=设置><i class="fas fa-cog fa-spin"></i></button><button id=go-up type=button title=回到顶部><span class=scroll-percent></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js?v=4.13.0"></script><script src="/js/main.js?v=4.13.0"></script><script src=https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.33/dist/fancybox/fancybox.umd.min.js></script><script>function panguFn(){"object"==typeof pangu?pangu.autoSpacingPage():getScript("https://cdn.jsdelivr.net/npm/pangu@4.0.7/dist/browser/pangu.min.js").then(()=>{pangu.autoSpacingPage()})}function panguInit(){panguFn()}document.addEventListener("DOMContentLoaded",panguInit)</script><div class=js-pjax><script>(()=>{var e=()=>{var e;0!==(e=document.querySelectorAll("pre > code.mermaid")).length&&e.forEach(e=>{var t=document.createElement("div");t.className="mermaid-wrap",t.innerHTML=`<pre class="mermaid-src" hidden>${e.textContent}</pre>`,e.parentNode.replaceWith(t)});let t=document.querySelectorAll("#article-container .mermaid");0!==t.length&&(e=()=>(e=>{window.loadMermaid=!0;let c="dark"===document.documentElement.getAttribute("data-theme")?"dark":"default";Array.from(e).forEach((e,t)=>{let n=e.firstElementChild;e="%%{init:{ 'theme':'"+c+"'}}%%\n"+n.textContent;let i=mermaid.render("mermaid-"+t,e);"string"==typeof i?(t=i,n.insertAdjacentHTML("afterend",t)):(i.then(({svg:e})=>{n.insertAdjacentHTML("afterend",e)}),setTimeout(()=>{var e=document.getElementsByTagName("svg");Array.from(e).forEach((e,t)=>{o(e)})},3e3))})})(t),btf.addGlobalFn("themeChange",e,"mermaid"),window.loadMermaid?e():btf.getScript("https://cdn.jsdelivr.net/npm/mermaid@11.0.0/dist/mermaid.min.js").then(e))};let o=l=>{let u=1,m=0,h=0,c=!1,o,d,r=0,e=!1,t=1,n=0,i=0;function a(){u=t,m=n,h=i,e=!1,s()}function s(){l.style.transform=`translate(${m}px, ${h}px) scale(${u})`}l.addEventListener("wheel",function(e){e.preventDefault();var t=0<e.deltaY?-.04:.04,n=(t=Math.min(Math.max(u+t,1),2.3))/u,i=l.getBoundingClientRect(),c=(e.clientX-i.left)/i.width,e=(e.clientY-i.top)/i.height,i=l.getBBox(),c=c*i.width,e=e*i.height;m=m*n-c*(n-1),h=h*n-e*(n-1),u=t,s()}),l.addEventListener("mousedown",function(e){c=!0,o=e.clientX,d=e.clientY,l.style.cursor="grabbing"}),document.addEventListener("mousemove",function(e){c&&(m+=e.clientX-o,h+=e.clientY-d,o=e.clientX,d=e.clientY,s())}),document.addEventListener("mouseup",function(){c=!1,l.style.cursor="grab"}),l.parentElement.addEventListener("dblclick",function(e){var t=Date.now();a(),r=t}),l.addEventListener("touchstart",function(e){if(1===e.touches.length&&((t=Date.now())-r<300&&(n=Date.now(),a(),r=n),r=t),1===(n=e).touches.length)c=!0,o=n.touches[0].clientX,d=n.touches[0].clientY;else if(2===n.touches.length){var t=n.touches[0].clientX-n.touches[1].clientX,n=n.touches[0].clientY-n.touches[1].clientY;let o=Math.sqrt(t*t+n*n),d=m,r=h,a=u;function i(e){var t,n,i,c;2===e.touches.length&&(t=e.touches[0].clientX-e.touches[1].clientX,n=e.touches[0].clientY-e.touches[1].clientY,t=Math.sqrt(t*t+n*n)/o,n=Math.min(Math.max(a*t,.5),1.15),c=(e.touches[0].clientX+e.touches[1].clientX)/2-l.getBoundingClientRect().left,e=(e.touches[0].clientY+e.touches[1].clientY)/2-l.getBoundingClientRect().top,i=l.getBBox(),c=c/l.getBoundingClientRect().width*i.width,e=e/l.getBoundingClientRect().height*i.height,m=d*t-c*(t-1),h=r*t-e*(t-1),u=n,s())}document.addEventListener("touchmove",i),document.addEventListener("touchend",function e(){document.removeEventListener("touchmove",i),document.removeEventListener("touchend",e)})}}),document.addEventListener("touchend",function(){c=!1})};btf.addGlobalFn("encrypt",e,"mermaid"),window.pjax?e():document.addEventListener("DOMContentLoaded",e)})()</script></div><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css media=print onload='this.media="all"'><script src=https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js></script><script src=https://cdn.jsdelivr.net/npm/butterfly-extsrc@1.1.3/metingjs/dist/Meting.min.js></script><script async data-pjax src=//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js></script><div id=local-search><div class=search-dialog><nav class=search-nav><span class=search-dialog-title>搜索</span><span id=loading-status></span><button class=search-close-button><i class="fas fa-times"></i></button></nav><div class=is-center id=loading-database><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class=search-wrap><div id=local-search-input><div class=local-search-box><input class=local-search-box--input placeholder=搜索文章 type=text></div></div><hr><div id=local-search-results></div><div id=local-search-stats-wrap></div></div></div><div id=search-mask></div><script src="/js/search/local-search.js?v=4.13.0"></script></div></div></body></html>