JVM 1、JVM 的位置 运行在操作系统之上的 java程序是排在 jre(jvm) 上的 所谓的JVM 调优就是在堆里面调,方法区就是 一个特殊的堆 2、JVM 的体系结构 3、类的加载器 作用 加载 class 文件 类加载器分为好几个,有等级 1、虚拟机自带的加载器 2、启动类(根)加载器 ...
分类:
其他好文 时间:
2020-08-20 18:22:08
阅读次数:
61
前言之前详细介绍了Java类的整个加载过程(类加载机制你真的了解吗?)。虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括。1)加载:查找并加载类的二进制字节流数据。2)验证:保证被加载的类的正确性。3)准备:为类的静态变量分配内存,并设置默认初始值。4)解析:把类中的符号引用转换为直接引用。5)初始化:为类的静态变量赋予正确的初始值。当然,要想掌握类加载机制,还是需要去深入
分类:
其他好文 时间:
2020-08-17 16:40:04
阅读次数:
82
之前在介绍JVM内存模型的时候(参看:了解JVM内存模型),提到了在运行时数据区之前,有个ClassLoader,这个就是类加载器。用以把Class文件中的描述信息加载到内存中运行和使用。以下是《深入理解Java虚拟机第二版》对类加载器机制的定义原文:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载
分类:
其他好文 时间:
2020-08-15 22:21:10
阅读次数:
62
在许多的高端开发的岗位中都会或多或少有要求面试人员要研究过一些常用中间件源码。这是因为一切的秘密都是藏在源码中,阅读源码能够让我们对框架或者中间件的理解更加深刻,而我们也能够在源码的研究中获得其中一些优秀的设计方式。而我们的中间件和源码那么多,我们该从何入手呢?其实大部分的中间件或者框架都有一些共性的部分,例如网络编程、多线程、反射和类加载等技术。所以深入研究透了一两个中间价的话,那么再回过头来看
分类:
其他好文 时间:
2020-08-13 12:00:18
阅读次数:
58
JVM类加载 1. Java对象的创建过程 类加载检查 > 分配内存 > 初始化零值 > 设置对象头 > 执行init方法 1.1 类加载检查 虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有 ...
分类:
其他好文 时间:
2020-08-12 15:40:12
阅读次数:
54
方法调用的底层实现 1. 一般我们写的代码都是经过编译,类加载,进入运行时数据区,一般是方法区,人关注的是方法的执行 2. jvm关注的是字节码的执行, 3. main函数是指令的起点,jvm创建main线程执行main方法,出发jvm的一些列指令,使jvm跑起来 4. 所以要了解在jvm中 方法调 ...
分类:
其他好文 时间:
2020-08-05 00:09:12
阅读次数:
95
<clinit>()方法 Java 类加载的初始化过程中,编译器按语句在源文件中出现的顺序,依次自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生方法。 如果类中没有静态语句和静态代码块,那可以不生成<clinit>() 方法。 并且 <clinit>() 不需要显式调用父类(接口除外, ...
分类:
编程语言 时间:
2020-08-03 00:52:33
阅读次数:
101
#前言 学习JVM类加载器,ClassLoader这个类加载器的核心类是必须要重视的。 #ClassLoader源码文档 Notes:下方蓝色文字是自己的翻译(如果有问题请指正)。黑色文字是源文档。 public abstract class ClassLoader extends Object 类 ...
分类:
编程语言 时间:
2020-08-02 16:15:22
阅读次数:
100
写在前面上一篇文章并发Bug之源有三,请睁大眼睛看清它们谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发Bug为了解决CPU,内存,IO的短板,增加了缓存,但这导致了可见性问题编译器/处理器擅自优化(Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行),导致有序性问题初衷是好
分类:
移动开发 时间:
2020-08-02 10:22:41
阅读次数:
107
JVM(Java虚拟机)算是面试必问的问题的了,而但凡问JVM一定会问的第一个问题就是:讲一讲JVM的组成?那本文就注重讲一下JVM的组成。首先来说JVM的组成分为,整体组成部分和运行时数据区组成部分,一般开发者关注的和面试官问的都是后者,但本文会详细讲解以上两个组成部分。一、JVM整体组成JVM整体组成可分为以下四个部分:类加载器(ClassLoader)运行时数据区(RuntimeDataAr
分类:
其他好文 时间:
2020-08-02 10:15:02
阅读次数:
65