
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
本文记录了在AMD云平台上部署和运行Gemma4大模型的实操过程。主要内容包括:1)注册AMD云和魔搭账号获取100小时算力资源;2)通过amd-smi和PyTorch命令验证GPU可用性;3)使用腾讯云镜像加速安装ModelScope并下载Gemma4模型;4)通过vLLM服务启动模型并进行对话测试。文章详细列出了每个步骤的终端命令和输出结果,同时提醒实验完成后需及时关闭云实例以避免算力浪费。整
本文分析了JVM虚拟内存管理的三阶段机制:预留(Reserved)、提交(Committed)和物理映射。在Linux环境下,JVM通过mmap系统调用预留虚拟地址空间,此时仅在内核创建VMA结构而不分配物理内存。提交阶段通过mprotect修改VMA权限,内核进行Overcommit审计但依然延迟物理内存分配。最终在首次访问内存时触发缺页中断,内核才从伙伴系统分配物理页帧并建立映射。这种延迟分配
dlopen (把库加载进内存) ➔ dlsym (查找CreateJavaVM函数地址) ➔ 填充 InvocationFunctions ➔ 创建新的的线程 ➔ 在JavaMain函数中调用 CreateJavaVM (点火启动) ,执行Java程序的main(String[] args)方法。
本文分析了JVM初始化过程及引导类加载器源码实现。主要内容包括:1)JVM初始化步骤,通过JavaMain()函数完成JVM初始化、主类加载、main方法验证和调用;2)引导类加载器源码分析,重点解读了LoadMainClass()函数如何通过JVM_FindClassFromBootLoader查找LauncherHelper类,并调用其checkAndLoadMain方法完成类加载;3)展示了
本文深入解析了Java Class文件格式及其在JVM中的处理过程。文章从Class文件的二进制结构入手,详细介绍了魔数、版本号、常量池、访问标志、类层级、字段方法表等核心组成部分。重点分析了OpenJDK源码中classFileParser.cpp的解析流程,包括常量池符号引用转化为内存对象、方法字节码存储、最终生成InstanceKlass结构的过程。特别强调了Class文件采用符号引用而非物
本文深入剖析了Java轻量级锁的判断与尝试逻辑。主要内容包括:1.执行流程分析:从`fast_enter`的偏向锁处理到`slow_enter`的轻量级锁尝试,最终可能升级为重量级锁的全链路逻辑。2.源码深度解读:重点剖析了`slow_enter`方法中的关键判断逻辑:无锁状态下的CAS抢占(轻量级锁核心机制)。锁重入情况的特殊处理。锁膨胀的触发条件。状态转换图解**:通过三步式判断流程和Mark
本文深入剖析了JVM重量级锁(`ObjectMonitor`)的核心实现机制。当多个线程竞争锁失败时,会被封装成`ObjectWaiter`节点通过CAS操作压入`_cxq`竞争队列(LIFO结构)。源码分析揭示了三个关键优化:1) 栈上分配节点避免GC开销;2) 单指针CAS实现高效无锁队列插入;3) CAS失败后尝试"贪婪抢锁"的启发式优化。文章通过并发场景示例详解了多线程"挤压"队列的过程,
本文深入分析了Java NIO在Linux平台下的多路复用实现机制。底层机制:通过Selector组件基于Linux的epoll实现高效I/O多路复用,采用红黑树管理文件描述符,双向链表(O(1))处理就绪事件。性能优化:采用延迟更新策略,批量处理注册请求以减少系统调用。使用直接内存实现零拷贝数据传输。实现架构:EPollSelectorProvider作为Linux平台入口。EPollArray
本文深入剖析了Java NIO中Selector的底层实现机制,重点分析了其在Linux平台下基于epoll的系统调用封装。文章从核心架构模型出发,详细解读了Selector生命周期的三个阶段:初始化阶段通过epoll_create创建实例并建立管道唤醒机制;注册阶段采用延迟触发优化批量处理epoll_ctl调用;轮询阶段通过epoll_wait实现高效事件监听。通过JDK8源码分析,揭示了Jav
本文深入分析了JDK著名的epoll空轮询BUG(CPU飙百)。该问题源于Linux内核与JVM的异常交互:当客户端异常断开时,epoll_wait会被异常唤醒但JDK无法正确转换这些事件,导致selector.select()不断立即返回0,形成死循环。文章通过OpenJDK8源码解析,揭示了updateSelectedKeys()方法中的关键缺陷,并给出了工业级解决方案——采用Netty等框架







