Java虚拟机
ljheee
如果对你有收获,欢迎关注公众号 架构道与术(ToBeArchitecturer) ,获得最新干货。https://url.cn/5wpXFoL
展开
-
Java虚拟机规范----JVM体系结构
一、Java平台的结构图二、JVM与JRE、JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE:Java Runtime Environment (java运行环境),包含JVM和类库 JDK:Java Development Kit(java开发工具包),包含JRE和开发工原创 2016-08-16 19:03:26 · 1873 阅读 · 2 评论 -
从多核硬件架构,看Java内存模型
在了解Java内存模型之前,先来看一下多核硬件架构。我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以从内存中读取和写入数据的过程和CPU的执行速度比起来差...原创 2018-09-02 17:23:29 · 895 阅读 · 0 评论 -
查看Java的汇编指令
通过javap 命令,可以将字节码文件反编译。如通过下面的命令:javap -c Xxxx.class而有时候想看某些JDK底层实现,发现反编译得到的代码并没有什么帮助,因此本文介绍如何查看Java的汇编指令,查看Java代码最真实的运行细节。Java本身提供这个支持,但需要引入而外的包(hsdis-amd64.dylib)。Mac下:https://github.com/...原创 2018-08-30 11:02:19 · 7268 阅读 · 0 评论 -
Java虚拟机----自定义类加载器:实现对字节码的加密解密
一、概述 上一篇《Java虚拟机----类的加载过程》分析了类加载的全过程,本文将以一个示例实现自定义类加载器。 Java 源文件的编译结果缺省为字节码,也就是后缀名为“.class”的文件,那么在很多情况下,我们并不希望看到编译后的字节码文件被其他人使用一些反编译工具将程序中的字节码文件反编译为源文件,以透露了一些非开源的数据信息,尤其是随着目前网络的日益普及原创 2016-08-31 17:26:40 · 3092 阅读 · 4 评论 -
Java虚拟机----类的加载过程
上一篇《Java虚拟机----类加载器》简单讲述了什么是类加载器、抽象类ClassLoader、类加载机制中的双亲委派模型以及自定义类加载器,这篇将分析-------类的加载过程。 类加载器的主要任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM内部,然后转化为一个与目标类对应的java.lang.Class对象实例。当然类加载器所执行的加载操作仅仅属于JVM中加载过程原创 2016-08-29 23:05:04 · 1141 阅读 · 0 评论 -
JVM垃圾收集器----垃圾标记、回收算法
一、垃圾收集器 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。顾名思义,垃圾回收就是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略(或者说按机回收算法)来进行回收(释放空间)?在目前的商业虚原创 2016-08-18 23:22:15 · 2027 阅读 · 0 评论 -
Java虚拟机----类加载器
一. 类加载器概述 任何一个类型在使用前,都必须经历完整的加载、连接和初始化3个类加载步骤,一旦类型成功经历了这3个步骤之后,它就可以随时随地的被使用了,开发人员可以在程序中访问和调用它的静态类成员信息(比如:静态字段、静态方法),或者使用new关键字为其创建对象实例。当然从一个类型被加载到JVM中开始算起,直至最终被卸载出内存为止,它的整个生命周期也就随之结束了。原创 2016-08-29 14:53:12 · 772 阅读 · 1 评论 -
Java关键字new-----对象的内存分配原理
一、关键字new概述 "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬间都做了什么? 在Java中使用new关键字创建对象变得很容易了,事实上,对这些事情你是不需要考虑的。需要访问一个文件吗?只需要创建一个新的File实例:new File(“jdb原创 2016-08-17 23:53:02 · 30426 阅读 · 3 评论 -
JVM体系结构-----深入理解内存结构
一、概述 内存在计算机中占据着至关重要的地位,任何运行时的程序或者数据都需要依靠内存作为存储介质,否则程序将无法正常运行。与C和C++相比,使用Java语言编写的程序并不需要显示的为每一个对象编写对应的内存分配和内存回收等相关的函数,这主要是得益于JVM的自动内存管理机制,使得Java开发人员可以从频繁的体力劳动中解放出来,只关注与自身的业务即可。 尽管JVM的自动...原创 2016-08-17 00:42:28 · 6631 阅读 · 2 评论 -
深度解析volatile—底层实现
我们都知道,Java关键字volatile的作用1、内存可见性2、禁止指令重排序可见性是指,在多线程环境,共享变量的操作对于每个线程来说,都是内存可见的,也就是每个线程获取的volatile变量都是最新值;并且每个线程对volatile变量的修改,都直接刷新到主存。下面重点介绍指令重排序。为什么要指令重排序?为了提高程序执行的性能,编译器和执行器(处理器)通常会对指令做一些...原创 2018-09-02 17:49:14 · 5691 阅读 · 8 评论