![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
文章平均质量分 93
-yanhui-
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机(一)内存区域分布
Java虚拟机的内存分布原创 2018-07-07 23:48:01 · 524 阅读 · 2 评论 -
深入理解Java虚拟机(二)垃圾收集算法
JVM讨论的需要垃圾回收的区域主要是指堆内存和方法区。 因为:程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知。因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。...原创 2018-07-28 13:53:21 · 366 阅读 · 0 评论 -
深入理解Java虚拟机(三)HotSpot算法和垃圾收集器
前面介绍了对象存活判定算法和垃圾收集算法,在HotSpot虚拟机上实现这些算法时,必须对算法的执行效率有严格的考量,才能保证虚拟机高效运行。枚举根节点(可达性分析算法的实现)GC Roots根节点的选择:可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。可达性分析:这个过程会出现GC停顿,意思就是在GC的时候Java的执行线...原创 2018-07-30 10:59:59 · 372 阅读 · 0 评论 -
深入理解Java虚拟机(五)类文件结构
查看class文件的二进制如下原创 2018-08-04 18:27:25 · 312 阅读 · 0 评论 -
深入理解Java虚拟机(六)类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。虚拟机加载进行类加载的过程是在程序运行期间完成的,在程序运行期间加载的好处是可以动态扩展,说白了就是在编译期间虚拟机是不知道要加载哪些类或者接口的,只有在程序运行的时候才知道需要加载的类。 类从被加载到虚拟机内存中开始,到卸载出内存为止,...原创 2018-08-01 13:42:54 · 280 阅读 · 0 评论 -
ubuntu下以16进制形式查看class文件、反编译class文件
16进制查看class文件以HelloWorld为例,创建一个HelloWorld.java文件,内容如下:public class HelloWorld { public static void main(String[] args) { String s = "Hollo World"; }}在HelloWorld.java文件所在目录下,打开终端,...原创 2018-11-08 14:15:19 · 2268 阅读 · 0 评论 -
深入理解Java虚拟机(四)Eden、Survivor、老年代、GC日志
指发生在新生代的垃圾收集动作,Minor GC非常频繁,<b>新生代采用复制算法</b>,一般回收速度也比较快。因为采用复制算法,所以年轻代分为三部分:**1个Eden区和2个Survivor区(分别叫From和To)**,默认比例为8:1。GC的流程如下原创 2018-11-23 16:58:29 · 12245 阅读 · 0 评论 -
深入理解Java虚拟机(七)字节码执行引擎(栈帧、动态连接、方法调用)
文章目录1. 栈帧(Stack Frame)执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。1. 栈帧(Stack Frame)...原创 2018-11-24 11:53:44 · 10867 阅读 · 13 评论