
深入理解JVM
文章平均质量分 65
举棋不定ok
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机(0)——JVM基本介绍
1、什么是JVM? 我们知道Java代码可以一次编写,到处执行(Write once,run anywhere),而这一特性正是JVM提供的。JVM帮工程师屏蔽了不同平台的差异性,提供了一致的编写接口。 我们编写的代码首先被编译器 编译成 符合JVM规范的class文件,然后JVM就是负责加载这个class文件,分配内存空间然后执行字节码。 注意:J...原创 2018-07-26 15:29:12 · 284 阅读 · 0 评论 -
深入理解Java虚拟机(1)——JVM的内存划分
如下图,jvm的内存分为5块,其中, 线程私有:虚拟机栈、本地方法栈、程序计数器线程共享:堆、方法区 1、程序计数器1.1 什么是程序计数器? 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,即记录的是正在执行的虚拟机字节码指令的地址。注意: 当线程执行的是一个Naive方法,这个计数器值则为空。 ...原创 2018-07-26 15:30:16 · 192 阅读 · 0 评论 -
深入理解Java虚拟机(3)——垃圾回收策略
JVM的内存模型有5个部分:虚拟机栈、程序计数器、本地方法栈、堆、方法区。 程序计数器、虚拟机栈、本地方法栈都是线程私有的,会随着线程的创建而创建,线程的结束而销毁。因此,垃圾回收器在何时回收这三块区域的问题就解决了。 此外,虚拟机栈、本地方法栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,并且每个栈帧的本地变量表都是在类加载时就确定的。因此以上三个区域内存分配和回...原创 2018-07-26 15:34:10 · 491 阅读 · 0 评论 -
深入理解java虚拟机(2)——HotSpot虚拟机对象探秘
1、对象的创建 本小节讨论普通对象,不包括数组和Class对象。 当遇到一条new指令时,有如下操作: 检查常量池中是否有这个对象所属类的符号引用; 若常量池中没有这个类的符号引用,说明类没有被定义!抛出ClassNotException; 若常量池中有这个类的符号引用,则进行下一步工作; 进而检查这个符号引用代表的类是否被JVM...原创 2018-08-15 20:42:44 · 267 阅读 · 0 评论 -
深入理解Java虚拟机(4)——对象的内存分配
对象基本上是在堆上分配(除了JIT即时编译器优化),分配规则如下: 主要分配在新生代的Eden区上; 若开启了本地线程分配缓冲TLAB,按线程优先在TLAB上分配; 少数情况直接分配在老年代 1、对象优先在Eden上分配 目前主流的GC都采用了分代回收算法,因此将内存分为了新生代和老年代。新生代一般采取“复制”算法,考虑效率和避免内存碎片的问题。 ...原创 2018-08-15 20:43:56 · 276 阅读 · 0 评论