JVM 学习笔记 20211002
本文最后更新于 1034 天前,其中的信息可能已经有所发展或是发生改变。

回想起去年这个时候,我还在加班搞 iOS 出包,真是唏嘘。

JVM 中的 Runtime data area

这个 Runtime data area 是我们开发接触最多的,比较常见的

stackoverflowExecption ,OutOfMemoryExecption

都是这个 Runtime data area 中的一部分区域爆满了,才会抛出的异常

Runtime data area 的 区域划分

  1. JAVA Heap
  2. Method Area
  3. JAVA Virtual Machine Stacks
  4. Native Method Stacks
  5. Program Counter Register

还是 老样子,建议大家学习的时候记英文,比如 Program Counter Register ,我看其他博客都是翻译成 程序计数器,甚至很多书都这么写。

实际上翻译 Register 是寄存器,这个翻译的正确中文翻译应该是 程序计数寄存器,用来 给 Execution engine 使用的,通过改变 Program Counter Register的值,来决定下一条需要执行的字节码指令

JAVA Heap

HEAP 是 Runtime data area 中占用空间最大的一部分区域,因为 HEAP 是被线程共享的,绝大部分的对象实例都在这里分配内存,比如 读取一张大图,这个时候可能会导致 OutOfMemoryExecption,那就是 堆的空间不够分配了,就会抛出异常。

Method Area

Method Area 在我理解是一个类似货物入库登记表的东西,当有货物入库的时候会在表上面登记货物的具体信息。实际在 jvm 中用来存储 ClassLoader 加载类之后获得的类的信息,常量,静态变量

JAVA Virtual Machine Stacks

stacks 是为函数调用服务的,是线程私有的,用来存储函数内的局部变量以及返回结果,用来管理函数的调用。每一次函数调用就会压入一个 stack frame,所以 当我们写一些死循环递归调用的时候,就会出现 stackoverflowExecptioon,压入栈内 的函数数量超过了栈的容纳限制

以上是我个人学习 JVM 的理解,如有错误,请大方指出

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇