随笔分类 -  深入理解java虚拟机(JVM)

摘要://项目路径 String classUrl = ResourceUtils.getURL("classpath:").getPath(); 百度上搜索了一大堆没用的,浪费了一个上午。 阅读全文
posted @ 2019-04-29 11:26 想去天空的猫 阅读(606) 评论(0) 推荐(0)
摘要:一、概述 执行引擎是java虚拟机最核心的组成部件之一。虚拟机的执行引擎由自己实现,所以可以自行定制指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。本节将主要从概 阅读全文
posted @ 2019-02-14 16:27 想去天空的猫 阅读(210) 评论(0) 推荐(0)
摘要:一、什么是类加载器 类加载器是一个用来加载类文件的类,Java源代码通过javac编译器编译成类文件,然后JVM来执行类文件中的字节码来执行程序。需要注意的是,只有被同一个类加载器加载的类才可能会相等。相同字节码被不同的类加载器加载的类不相等。 二、类加载器分类 1.启动类加载器 由C++实现,是虚 阅读全文
posted @ 2019-02-13 17:10 想去天空的猫 阅读(233) 评论(0) 推荐(0)
摘要:一、类加载机制概述 虚拟机把描述类的数据从class文件加载到内存并对数据进行效验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 二、类加载的机制 类加载的过程一共是5个步骤:加载、连接、初始、使用、卸载,其中连接过程中又会进行验证、准备、解析的工作,具体如下 阅读全文
posted @ 2019-02-13 10:56 想去天空的猫 阅读(231) 评论(0) 推荐(0)
摘要:一、字节码指令的含义 Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数)。此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实体机的寄存器但是结构上有所区别。 字节码指令的作用简单的来说就是jvm将我们写好的代码翻译成字节码指 阅读全文
posted @ 2019-02-12 17:11 想去天空的猫 阅读(286) 评论(0) 推荐(0)
摘要:Class文件是访问jvm的重要指令,学习了class文件能够更加深入的了解jvm的工作过程。本文只进行概况总结,要进行更加详细的学习class文件,可以参考:https://blog.csdn.net/tjiyu/article/details/53870153 一、class文件的含义及意义 c 阅读全文
posted @ 2019-02-12 16:05 想去天空的猫 阅读(321) 评论(0) 推荐(0)
摘要:一般来说,jvm的调优策略是没有一种固定的方法,只有依靠我们的知识和经验来对项目中出现的问题进行分析,正如吉德林法则那样当你已经把问题清楚写出来,就已经解决了一半。虽然JVM调优中没有固定的策略,但是本文会介绍几种比较常见的调优策略。 一、减少Full GC 项目中如果出现了Full GC,由于Fu 阅读全文
posted @ 2019-01-23 15:21 想去天空的猫 阅读(637) 评论(0) 推荐(0)
摘要:一、标记清除算法 标记清除算法顾名思义,就是将需要回收的对象进行标记,然后进行清除。那么这个算法就有标记和清除两种过程。标记过程主要是通过可达性分析算法进行判断存活对象,然后遍历所有的对象来找到需要回收的对象,开始进行清除过程。 这种算法虽然非常的简单,但是也有很多缺点:1.效率问题,上面我们已经将 阅读全文
posted @ 2018-12-16 22:11 想去天空的猫 阅读(235) 评论(0) 推荐(0)
摘要:本章开始学习垃圾回收的过程,垃圾回收的过程首先就是要确定对象是否是垃圾对象,如果是垃圾对象,垃圾回收器才会进行回收。垃圾回收主要又两种算法:引用计数算法和可达性分析算法。 一、引用计数算法 引用计数算法就是在对象中添加了一个引用计数器,当有地方引用这个对象时,引用计数器的值就加1,当引用失效的时候, 阅读全文
posted @ 2018-11-20 21:41 想去天空的猫 阅读(1666) 评论(0) 推荐(0)
摘要:一、对象的创建过程 对象的创建过程大致可以分为六步,其中对象的分配尤为重要: 二、对象分配内存 一般来说对象分配内存有两种方式: 第一种是指针碰撞,这是一种比较理想的方式:如果Java堆是绝对规整的:一边是用过的内存,一边是空闲的内存,中间一个指针作为边界指示器;分配内存只需向空闲那边移动指针,这种 阅读全文
posted @ 2018-11-14 22:19 想去天空的猫 阅读(255) 评论(0) 推荐(0)
摘要:一、堆的含义 jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回收优化的时候,首先就要想到堆中的区域。 二、方法区 方法区同样是jvm的内存区域,它和堆一样,都是线 阅读全文
posted @ 2018-11-07 23:04 想去天空的猫 阅读(451) 评论(0) 推荐(0)
摘要:一、栈的含义 用于描述方法执行的动态内存模型,简单来说就是代码中的方法模块。主要用于局部变量表。栈的大小在编译器中就已经分配了空间,在进入一个方法时,这个方法需要栈帧分配多少内存是固定的,运行期间是不会改变大小。 局部变量表示指:存放编译期可知的各种基本类型和引用类型。 二、栈帧 说到了栈,就不得不 阅读全文
posted @ 2018-11-06 21:23 想去天空的猫 阅读(362) 评论(0) 推荐(0)
摘要:前言: 本文主要是我自己总结的一些技巧,可能对搜到这篇的来观看的朋友有些很难理解,请见谅。 一、JVM的运行时数据区 总共有两个区域: 1.线程共享区:方法区,java堆 2.线程独占区:虚拟机栈,本地方法栈,程序计数器 二、程序计数器 程序计数器就是程序执行代码的行号(也称为地址),每一个程序都会 阅读全文
posted @ 2018-11-05 22:56 想去天空的猫 阅读(198) 评论(0) 推荐(0)
摘要:一、JDK、JRE、JVM三者的关系 JDK包含了JRE和JVM,JRE包含了JVM,其中JRE中没有javac 附一张官网的详细图: 二、RIA RIA(富客户端):能完成浏览器无法完成的功能,它是借于服务端与客户端之间的功能。 JDK中的RIA:JAVAFX,內似于swing,运行于服务端 阅读全文
posted @ 2018-11-05 22:39 想去天空的猫 阅读(239) 评论(0) 推荐(0)