
JAVA-虚拟机
文章平均质量分 92
介绍java基础内容
波波烤鸭
10余年架构和线上讲师工作经验。精通Java,微服务和云原生相关,致力于Java技术的免费分享。
展开
-
阿里二面JVM相关面试题
JVM面试专题原创 2022-01-25 16:15:56 · 3119 阅读 · 0 评论 -
虚拟机环境搭建之vagrant
在之前的很多案例中我们都是通过VMware来构建虚拟机的,但是通过VMware构建的过程相对比较复杂但是VMware功能强大,我们在某些情况下并不需要,这时我们就可以通过virtualBox+vagrant来快速构建我们的虚拟机环境了。所以本篇文章就给大家来介绍下如何快速的构建。相关工具安装1.VirtualBox下载安装官方下载地址:https://www.virtualbox.org/wiki/Downloads2.Vagrant下载安装官方地址:https://www.vagrantup原创 2020-10-25 17:18:13 · 1701 阅读 · 1 评论 -
Java享元模式(FlyWeight)
享元模式 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存.核心:享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。• 内部状态:可以共享,不会随环境变化而改变• 外部状态:不可以共享,会随环境变化而改变案例围棋软件设计每个围棋棋子都是一个对象,有如下属性:享元模...原创 2019-03-15 23:52:45 · 2384 阅读 · 1 评论 -
Class文件结构介绍[属性表集合]
属性表 在前面的内容中属性表(attribute_info)已经出现多多次了,在Class文件、字段表、方法表中都可以携带自己的属性集合,用于描述某些场景专有的信息 与class文件中其他的数据项目要求严格的顺序、长度和内容不同,属性表集合的限制稍微宽松些,不在要求各个属性表具有严格顺序,并且只要不与已有属性名称重复,任何人实现的编译器都可以向属性表中写入自己的属性信息,java虚拟机会...原创 2019-03-13 22:47:17 · 2691 阅读 · 1 评论 -
虚拟机字节码指令表
字节码助记符指令含义0x00nopNone0x01aconst_null将null推送至栈顶0x02iconst_m1将int型-1推送至栈顶0x03iconst_0将int型0推送至栈顶0x04iconst_1将int型1推送至栈顶0x05iconst_2将int型2推送至栈顶0x06iconst_3将int型...原创 2019-03-13 21:23:00 · 2342 阅读 · 1 评论 -
Class文件结构介绍[字段表集合和方法表集合]
字段表集合 字段表(field_info)用来描述接口或类中声明的变量,字段包括类级别变量以及实例级别变量。但不包括方法内部声明的局部变量。以如下代码来分析public final class Test2 implements Serializable,Runnable{ private static final String NAME="bobo"; private int a...原创 2019-03-13 00:58:55 · 2438 阅读 · 1 评论 -
Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]
访问标志 在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果是类的话是否被声明为final等,标志名称标志值含义ACC_PUBLIC0x0001是否为public类型ACC_FINAL0x00...原创 2019-03-13 00:10:02 · 1860 阅读 · 0 评论 -
Class文件结构介绍[常量池]
概述 常量池是紧接着主次版本号之后出现的,常量池可以理解为class文件之中的资源仓库,它是Class文件结构中与其他项目管理最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目。案例代码还是和前一篇的一样,如下:public class Test { private int a; public int run(){...原创 2019-03-12 21:37:31 · 1956 阅读 · 0 评论 -
Class文件结构介绍[魔数版本号]
对于每个java程序员来说class文件应该是每天都会接触的,一个class文件都对应着唯一的一个类或接口的定义信息,但是对应class文件的具体存储结构并不一定很清楚,所以本文就梳理下class文件的结构Class文件 Class文件是一组8位字节为基础单位的二进制流,各个数据项严格按照顺序紧凑的排列在Class文件中,中间没有添加任何分隔符,整个class文件中存储的内容几乎全部是程...原创 2019-03-12 12:00:23 · 1993 阅读 · 0 评论 -
Java的内存模型
java的后端服务器开发中"高效并发"是我们经常会碰到的,而要写出高效的代码需要更多的积累与实践。而一些基础的内容是往这个方向发展的基石。所以我们就来介绍下。硬件效率的一致性 随着硬件技术的发展,处理器的处理能力越来越强大,但是与处理器交互的内存的处理能力并没有提升多少,读取运算,存储运算这些IO操作的瓶颈并没有得以消除,处理器的处理效率比内存的处理效率要高好几个数量级,在这种情况下在处...原创 2019-03-11 20:36:28 · 2326 阅读 · 0 评论 -
JVM中的类加载器
类加载器 把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为类加载器。自定义类加载器 现在有个需求在项目中我们需要加载一个特定目录下的class文件【c:\tools\myClassLoader】,这时我们需要自己来定义特定的类加载器。1.创建自定义类加载器 ...原创 2019-03-11 00:31:50 · 1936 阅读 · 0 评论 -
JVM中类加载的过程
前面看了类加载的时机,本文来记录下类加载的过程,也就是加载的每个阶段都做了哪些事情类的生命周期加载 "加载"是类加载过程中的一个阶段,在这个阶段虚拟机做了3件事通过一个类的全限定名获取定义此类的二进制流通过这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据访问的入口。 注...原创 2019-03-10 21:22:36 · 2016 阅读 · 0 评论 -
JVM中类加载的时机
本文主要记录下类的加载过程,一个类从加载到内存中开始到被卸载的整个生命周期作为java程序员来说应该还是要清楚的。类的生命周期 类从加载到内存中到卸载的整个过程中经历了如下的过程: 这几个步骤中 验证,准备,解析这三个步骤有称为连接阶段,大体的顺序是加载,验证,准备,解析,初始化,使用和卸载,前四个有部分有交叉顺序。类的加载时机 类加载的时机,也就是类初始化的时机(加载,验证...原创 2019-03-09 22:48:54 · 1942 阅读 · 0 评论 -
JVM中的垃圾收集器
垃圾收集器 前面介绍的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。这里讨论的是JDK1.7 Update14之后的HotSpot虚拟机。该虚拟机包含的收集器如下:注意:到现在为止还没有一个完美的收集器,通过比较我们可以在具体的应用中选择最合适的收集器,这个是我们的目的。Serial Serial是最基本的,发展历史最悠久的收集器。单线程,垃圾收集的时候必须暂停所...原创 2019-03-02 23:01:02 · 2017 阅读 · 0 评论 -
JVM垃圾回收算法实现的方式
通过前面的介绍我们清楚了JVM中对象是如何判断存活及垃圾回收算法。那么垃圾回收的算法到底是怎么实现的呢?因为HotSpot虚拟机在对对象回收的时候对执行的效率要求是非常严格的,只有这样才能保证虚拟机的高效运行。垃圾收集算法枚举根节点 我们知道可达性分析算法是需要GC Roots对象的,而GR Roots对象的组成是这四种。序号类型1虚拟机栈(本地变量表)中引用的...原创 2019-03-01 22:59:41 · 2276 阅读 · 0 评论 -
JVM中垃圾收集算法总结
通过前面的介绍我们了解了对象创建和销毁的过程。那么JVM中垃圾收集器具体对对象回收采用的是什么算法呢?本文主要记录下JVM中垃圾收集的几种算法。JVM的垃圾回收的算法标记-清除算法(Mark-Sweep) 标记清除算法是最基础的回收算法,该算法分为两个阶段,即标记阶段和清除阶段。阶段说明标记阶段先根据可达性分析算法找出需要回收的对象进行标记清除阶段统一回...原创 2019-02-28 21:32:16 · 2485 阅读 · 0 评论 -
JVM中对象的回收过程
当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配对应的内存空间,显然我的内存空间是固定有限的,所以我们需要对没有用的对象进行回收,本文就来记录下JVM中对象的销毁过程。1.怎么判断对象是没用的了引用计数算法 我们在很多场景中会听到java对象判断存活的方式是计算该对象的引用计数器是否为0,如果为0就说明...原创 2019-02-28 00:14:47 · 3017 阅读 · 1 评论 -
JVM的内存对象介绍[创建和访问]
作为java程序员对应Object应该是非常熟悉的,但是对于对象在JVM中的一些情况并不是很清楚,所以本文就来记录下对象在JVM中的一些内容对象的创建java程序中创建对象的常用方式是:Object obj = new Object();该行代码的执行过程如下:从图中我们可以发现对象创建的步骤如下执行new执行检查这个指令参数是否能够在常量池中定位到一个类的符号引用,并且检...原创 2019-02-18 23:32:34 · 2147 阅读 · 0 评论 -
java虚拟机运行时数据区介绍
最近打算将java虚拟机的相关知识点整理出来。本文先介绍下java虚拟机运行时分配的各个区域的作用运行时数据区域java虚拟机在程序执行的过程中会把它所管理的内存划分为若干个不同的数据区域,每个区域都有各自的用途。结构图如下:程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,这块区域是线程私有的。作用是当前线程所执行的字节码的行号指示器...原创 2019-02-14 22:10:53 · 2170 阅读 · 0 评论 -
Java代理模式
代理模式23中(Gof)中代理模式中的一种,AOP本身就是基于动态代理实现的,所以掌握了代理模式对AOP的学习很有帮助,所以先讲下代理模式1.静态代理模式若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静态代理中的代理类和目标类会实现同一接口或是派生自相同的父类。1.1 创建接口/*** 定义公共...原创 2019-01-14 22:10:07 · 5741 阅读 · 1 评论