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

推荐订阅源

H
Help Net Security
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
I
Intezer
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Hacker News: Ask HN
Hacker News: Ask HN
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
云风的 BLOG
云风的 BLOG
博客园_首页
V2EX - 技术
V2EX - 技术
T
Threat Research - Cisco Blogs
腾讯CDC
宝玉的分享
宝玉的分享
博客园 - 叶小钗
罗磊的独立博客
S
Securelist
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
博客园 - 司徒正美
W
WeLiveSecurity
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
NISL@THU
NISL@THU
N
News and Events Feed by Topic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
IT之家
IT之家

王欣的博客

第6章:工具篇——使用 RunningHub(ComfyUI)生成短剧 - 王欣说AI|信息安全|AIGC|AI 第5章:工具篇——使用小云雀Agent生成短剧 - 王欣说AI|信息安全|AIGC|AI 第4篇:导演思维 + AI素材生成全流程 - 怎么用AI从0做出短剧/漫剧? - 王欣说AI|信息安全|AIGC|AI 马斯克出手!SpaceX 豪掷 600 亿美元锁定 Cursor,AI 编程江湖巨变 - 王欣说AI|信息安全|AIGC|AI 第3篇:编剧篇——一切从一个好故事开始 - 怎么用AI从0做出短剧/漫剧? - 王欣说AI|信息安全|AIGC|AI 第2篇:四项基本功——提示词、镜头语言、剪映、投流 - 怎么用AI从0做出短剧/漫剧? - 王欣说AI|信息安全|AIGC|AI 第1篇:为什么2026年是一个人拍短剧的最佳时机?- 怎么用AI从0做出短剧/漫剧? - 王欣说AI|信息安全|AIGC|AI 2026 AI 开发新范式:Harness Engineering(驾驭工程)为何是智能体的决胜点? - 王欣说AI|信息安全|AIGC|AI 通过Claude Code的源码分析其技术架构 - 王欣说AI|信息安全|AIGC|AI 没团队、没演员、没经验——我一个写代码的,用AI独自做完了短剧《顶级温差》 - 王欣说AI|信息安全|AIGC|AI 谁能替你操作电脑?OpenClaw vs Claude Code vs Codex 终极拆解 - 王欣说AI|信息安全|AIGC|AI OpenClaw macOS安装:飞书机器人一键生成小说+分镜 - 王欣说AI|信息安全|AIGC|AI AI公司亲自下场研究 Macos上跑Docker Desktop遇到registry-1.docker.io网络不通问题填坑笔记 - 王欣说AI|信息安全|AIGC|AI Macos上跑Docker Desktop遇到registry-1.docker.io网络不通问题填坑笔记 - 王欣的博客|微服务|RPC|信息安全|AIGC RocketMQ的死信队列你了解多少?怎么实现的? - 王欣说AI|信息安全|AIGC|AI RocketMQ的死信队列你了解多少?怎么实现的? - 王欣的博客|微服务|RPC|信息安全|AIGC Dubbo服务间的连接是怎么控制处理的? - 王欣说AI|信息安全|AIGC|AI Dubbo服务间的连接是怎么控制处理的? - 王欣的博客|微服务|RPC|信息安全|AIGC Seata 基本原理和源码分析 - 王欣说AI|微服务|RPC|信息安全|AIGC 分布式事务一致性算法Paxos、raft、zab等的比较 - 王欣说AI|微服务|RPC|信息安全|AIGC 谈谈各种流程引擎、规则引擎 - 王欣说AI|微服务|RPC|信息安全|AIGC 从netty组件的传输讲讲io - 王欣说AI|微服务|RPC|信息安全|AIGC JVM内存结构的历史 (从Jdk1.6、1.7、8) - 王欣说AI|信息安全|AIGC|AI 怎么定位线上的内存溢出? - 王欣说AI|微服务|RPC|信息安全|AIGC MQ组件盘点,哪些你用在了生产中? - 王欣说AI|信息安全|AIGC|AI JVM内存结构的历史 (从Jdk1.6、1.7、8) - 王欣的博客|微服务|RPC|信息安全|AIGC 怎么定位线上的内存溢出? - 王欣的博客|微服务|RPC|信息安全|AIGC Seata 基本原理和源码分析 - 王欣的博客|微服务|RPC|信息安全|AIGC 分布式事务一致性算法Paxos、raft、zab等的比较 - 王欣的博客|微服务|RPC|信息安全|AIGC 谈谈各种流程引擎、规则引擎 - 王欣的博客|微服务|RPC|信息安全|AIGC 从netty组件的传输讲讲io - 王欣的博客|微服务|RPC|信息安全|AIGC MQ组件盘点,哪些你用在了生产中? - 王欣的博客|微服务|RPC|信息安全|AIGC 一些有用的github配置 - 王欣说AI|信息安全|AIGC|AI 一些有用的github配置 - 王欣的博客|微服务|RPC|信息安全|AIGC 我看《subscribed》 - 王欣说AI|信息安全|AIGC|AI 我看《subscribed》 - 王欣的博客|微服务|RPC|信息安全|AIGC 为什么Redis读写快? - 王欣说AI|微服务|RPC|信息安全|AIGC 为什么Redis读写快? - 王欣的博客|微服务|RPC|信息安全|AIGC Dubbo代码分析—超时和重试设计 - 王欣说AI|微服务|RPC|信息安全|AIGC Dubbo代码分析—超时和重试设计 - 王欣的博客|微服务|RPC|信息安全|AIGC 【译】apache 基金会角色列表 - 王欣说AI|微服务|RPC|信息安全|AIGC 【译】apache 基金会角色列表 - 王欣的博客|微服务|RPC|信息安全|AIGC Dubbo代码分析---服务端线程池 - 王欣说AI|微服务|RPC|信息安全|AIGC rpc跟踪日志常用shell统计脚本 - 王欣说AI|微服务|RPC|信息安全|AIGC Dubbo代码分析---服务端线程池 - 王欣的博客|微服务|RPC|信息安全|AIGC rpc跟踪日志常用shell统计脚本 - 王欣的博客|微服务|RPC|信息安全|AIGC 并发 - 谈谈HashMap和ConcurrentHashMap - 王欣说AI|微服务|RPC|信息安全|AIGC 并发 - 谈谈HashMap和ConcurrentHashMap - 王欣的博客|微服务|RPC|信息安全|AIGC JVM基本结构 - 王欣的博客|微服务|RPC|信息安全|AIGC 血的教训:线程池定义一定要全局化,共享使用 - 王欣说AI|微服务|RPC|信息安全|AIGC 谈谈并发包的工具都是用在什么地方,底层是怎么实现的? - 王欣说AI|信息安全|AIGC|AI 血的教训:线程池定义一定要全局化,共享使用 - 王欣的博客|微服务|RPC|信息安全|AIGC
JVM基本结构 - 王欣说AI|微服务|RPC|信息安全|AIGC
2018-10-08 · via 王欣的博客

JVM基本结构

一、什么是 Java GC (垃圾回收) ?

​ 我们知道,java语言不像C++,将内存的分配和回收给程序员来处理。java用统一的垃圾回收机制来管理java进程的内存,就是通常所说的垃圾回收:GC(Garbage Collection)
先到维基百科上看一下Garbage Collection的概念:
​ In computer science, garbage collection (GC) is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objectst that are no longer in use by the program. Garbage collection was invented by John McCarthy around 1959 to simplify manual memory management in Lisp.
​ 这就面临一些问题:java进程到底是什么样的结构?java进程的内存哪些需要被回收,在什么条件下才回收,谁来回收?我们首先来看一些概念

二、什么是JVM ?

从维基百科上看jvm的定义:
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode.

三、Jvm运行时数据区

在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 根据《Java虚拟机文档》 第七版的规定,Java虚拟机锁管理的内存包含下面几个运行时数据区域:

方法区、虚拟机栈、本地方法栈、队、程序计数器等。

  • 程序计数器:

    一块较小的内存空间,可以看做是当前线程所执行的字节码的行数指示器

  • JAVA虚拟机栈:

    虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

    局部变量表存放了编译器可知的:

    • 基本数据类型(boolean、byte、char、short、int、float、long、double)
    • 对象引用:reference类型,可能是一个指向对象起始地址的引用指针,也可能是一个指向对象起始地址的引用指针
    • returnAddress地址:指向了一条字节码指令的地址
  • 本地方法栈:

    为虚拟机使用到的Native方法服务,与虚拟机栈的作用类似。

  • JAVA堆:

    Java堆是被所有线程共享的一块内存区域,此内存区域的唯一目的就是存放内存实例,所有的对象实例以及数组都要在堆上分配,是垃圾收集管理的主要区域。

  • 方法区:
    和Java堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编辑器编译后的代码

  • 运行时常量池

    是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有常量池来存放编译期生成的各种字面量和符号引用。

  • 直接内存

    对外内存,不是jvm的存储,所以不受jvm的堆参数控制。NIO可以直接分配对外内存,可能会导致OutOfMemoryError,导致java进程僵死。

四、对象的访问定位

​ 我们Java程序需要通过栈上的reference数据来操作堆上的具体对象。 有两种方式:使用句柄访问通过指针访问

  • 使用句柄

    Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,句柄中包含了对象实例与类型数据各自的具体地址信息。

  • 通过指针

    Java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而reference中存储的直接就是对象地址。

参考:

  • 《深入理解java虚拟机》周志明
  • 图片来自网络