Java内核
文章平均质量分 91
大数据面试宝典
这个作者很懒,什么都没留下…
展开
-
【无为】聊聊java中JVM的方法区
栈、堆、方法区的关系方法区在哪里?https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4《Java虚拟机规范》中明确说明: “尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。” 但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java 堆的内存空间。方法区的理解从原创 2021-12-17 11:25:42 · 376 阅读 · 2 评论 -
【无为原创】万字图文详解java的堆内存及OOM的解决方案,看完还不懂,从此绝笔不写了
此文阅读大约10分钟,目录如下: 什么是JVM的堆 是不是所有的Java对象都放在堆上? 线程和堆的关系堆的内部结构 面试题 新生代与老年代如何设置堆的大小? 新生代与老年代的比例 设置Eden、幸存者的比例 常用参数对象分配 金句: 分配过程 内存分配策略(或对象提升(promotion)规则): 对象分配原则Minor GC 、Major GC、Full GC Minor GC触发机制原创 2021-12-15 16:03:29 · 374 阅读 · 0 评论 -
一文带你快速了解大厂必问的JVM双亲委派机制
点击上方蓝字关注我们这个真的是大厂必备的,委派机制,我们来看一下都有哪些公司会问到:双亲委派好处有哪些?(亚信)类加载器双亲委派模型机制?(苏宁)双亲委派机制 (蚂蚁金服)双亲委派机制及使用原因 (蚂蚁金服)类加载器的双亲委派模型是什么?(蚂蚁金服)双亲委派模型介绍一下 (小米)讲一下双亲委派模型,以及其优点 (滴滴)类加载器的双亲委派模型是什么?(京东)双亲委派机制的定义 类加载器用来把类加载到Java虚拟机中。从JDK1.2版本开始,原创 2021-12-05 23:39:05 · 306 阅读 · 0 评论 -
4000字长文深度讲解JVM自定义类加载器
本文目录:1、面试题2、为什么使用自定义类加载器3、应用场景4、实现方式5、代码demo 先上一道面试题1、手写一个类加载器Demo (百度)为什么要自定义类加载器? 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿里内某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响...原创 2021-12-03 14:10:03 · 198 阅读 · 0 评论 -
3分钟看懂JVM类加载器Classloader源码深度剖析
在看这篇文章之前,先找到Classloader.class这个类,然后对照下文:ClassLoader与现有类加载器的关系: ClassLoader是一个抽象类。如果我们给定了一个类的二进制名称,类加载器应尝试去定位或生成构成定义类的数据。一种典型的策略是将给定的二进制名称转换为文件名,然后去文件系统中读取这个文件名所对应的class文件。ClassLoader的主要方法抽象类ClassLoader的主要方法:(内部没有抽象方法) public fi...原创 2021-12-02 15:52:56 · 455 阅读 · 0 评论 -
图文详解JVM自带的各种类加载器
站在程序的角度看,引导类加载器与另外两种类加载器(系统类加载器和扩展类加载器)并不是同一个层次意义上的加载器,引导类加载器是使用C++语言编写而成的,而另外两种类加载器则是使用Java语言编写而成的。由于引导类加载器压根儿就不是一个Java类,因此在Java程序中只能打印出空值。原创 2021-11-30 10:30:19 · 368 阅读 · 0 评论 -
图文详解JVM类加载的第4、5个步骤,类的使用与卸载
往期推荐2000字带你学习JVM类加载的第一个步骤(Loading字节码)4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)2200字带你学习JVM类加载的第三个阶段(初始化)类的使用(Using)任何一个类型在使用之前都必须经历过完整的加载、链接和初始化3个类加载步骤。一旦一个类型成功经历过这3个步骤之后,便“万事俱备,只欠东风”,就等着开发者使用了。开发人员可以在程序中访问和调用它的静态类成员信息(比如:静态字段、静态方法),或者使用n...原创 2021-11-29 15:51:09 · 304 阅读 · 0 评论 -
2200字带你学习JVM类加载的第三个阶段(初始化)
往期推荐2000字带你学习JVM类加载的第一个步骤(Loading字节码)4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)子类加载前先加载父类?在加载一个类之前,虚拟机总是会试图加载该类的父类,因此父类的<clinit>总是在子类<clinit>之前被调用。也就是说,父类的static块优先级高于子类。口诀:由父及子,静态先行。哪些类不会生成<clinit>方法?Java编译器并不会为所有的类都产生&...原创 2021-11-29 15:48:35 · 1380 阅读 · 0 评论 -
4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)
所谓解析就是将符号引用转为直接引用,也就是得到类、字段、方法在内存中的指针或者偏移量。因此,可以说,如果直接引用存在,那么可以肯定系统中存在该类、方法或者字段。但只存在符号引用,不能确定系统中一定存在该结构。原创 2021-11-29 15:45:54 · 2595 阅读 · 0 评论 -
2000字带你学习JVM类加载的第一个步骤(Loading字节码)
先来几道面试题,试试会不会·简述Java类加载机制?(百度)·JVM类加载机制(滴滴)·JVM中类加载机制,类加载过程,什么是双亲委派模型?(腾讯)·JVM的类加载机制是什么?(京东)ᡧ01-类的加载过程(生命周期)᪺01-说说类加载分几步?按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段:其中:①第一过程的加载(loading)也称为装载②验证、准备、解析3个部...原创 2021-11-24 23:45:38 · 394 阅读 · 0 评论 -
Class 文件结构(二)
文章目录类索引、父类索引、接口索引集合字段表集合字段计数器字段表字段表集合字段计数器字段表方法表集合**方法表集合****方法计数器**方法表属性表集合**属性表集合(attributes)**属性计数器属性表类索引、父类索引、接口索引集合· 在访问标记后,会指定该类的类别、父类类别以及实现的接口,格式如下:· 这三项数据来确定这个类的继承关系。· 类索引用于确定这个类的全限定名· 父类索引用于确定这个类的父类的全限定名。由于 Java语言不允许多重继承,所以父类索引只有原创 2021-11-17 19:05:15 · 461 阅读 · 0 评论 -
什么是Java语言和Java生态圈,资深程序员的理解
文章目录Java语言与Java生态圈Oracle JDK与Open JDK之间的关系JDK与JRE与JVM如何理解Java是跨平台的语言如何理解JVM是跨语言的平台Java的发展历程常见的JVMJVM的生命周期?重点说下HotSpot?Java语言与Java生态圈Oracle JDK与Open JDK之间的关系Oracle JDKJava最早是由SUN公司发明,Oracle JDK之前叫SUN JDK,显而易见,这是在2009年Oracle收购SUN公司之前,收购之后被名为Oracle JDK,实际原创 2021-11-15 22:51:54 · 483 阅读 · 0 评论 -
Class 文件结构(一)
文章目录Class 文件结构细节class文件结构细节概述class文件的魔数是什么?如何确保高版本的JVM可执行低版本的class文件?常量池:class文件的基石?作用是?为什么需要常量池计数器?常量池表**常量类型和结构**总结:访问标识Class 文件结构细节· 官方文档位置:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html· Class 类的本质任何一个Class文件都对应着唯一一个类或接口的定义信息原创 2021-11-16 21:56:43 · 598 阅读 · 1 评论 -
教你如何直接阅读一个java的字节码指令(三)
文章目录控制转移指令条件跳转指令比较条件跳转指令多条件分支跳转无条件跳转异常处理指令抛出异常指令异常处理与异常表同步控制指令方法级的同步方法内指定指令序列的同步面试题控制转移指令 程序流程离不开条件控制,为了支持条件跳转,虚拟机提供了大量字节码指令,大体上可以分为 1)比较指令、 2)条件跳转指令、 3)比较条件跳转指令、 4)多条件分支跳转指令、 5)无条件跳转指令等。条件跳转指令一、条件跳转指令条件跳转指令通常和比较指令结合使用。在条件跳转指令执行前,一般可以先用比较指令原创 2021-11-13 21:15:25 · 743 阅读 · 0 评论 -
教你如何直接阅读一个java的字节码指令(二)
文章目录对象的创建与访问指令创建指令字段访问指令数组操作指令类型检查指令方法调用与返回指令方法调用指令方法返回指令操作数栈管理命令对象的创建与访问指令 Java是面向对象的程序设计语言,虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。创建指令一、创建指令虽然类实例和数组都是对象,但Java虚拟机对类实例和数组的创建与操作使用了不同的字节码指令:1. 创建类实例的指令:· 创建类实例的指令原创 2021-11-13 21:11:06 · 845 阅读 · 0 评论 -
教你如何直接阅读一个java的字节码指令(一)
文章目录字节码指令字节码与数据类型指令分类加载与存储指令**加载和存储指令**操作数栈与局部变量表局部变量压栈指令常量入栈指令出栈装入局部变量表指令算术指令所有的算术指令比较指令的说明类型转换指令宽化类型转换窄化类型转换字节码指令Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java 虚拟机采用面向原创 2021-11-13 20:57:21 · 1241 阅读 · 1 评论 -
教你如何直接阅读一个java的字节码文件结构分析----附带逐字节码分析图
字节码文件概述字节码文件是跨平台的吗?Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁。想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。· 所有的JVM全部遵守Java虚拟机规范,也就是说所有的J原创 2021-11-11 22:28:17 · 686 阅读 · 1 评论