java虚拟机
Java程序员-张凯
这个作者很懒,什么都没留下…
展开
-
JVM的类加载机制全面解析
什么是类加载机制JVM把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制。类的生命周期类从被加载到内存中,到被卸载出内存,一共分为以下几步:加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initia...转载 2019-12-04 08:59:40 · 1348 阅读 · 0 评论 -
Java虚拟机学习笔记整理
一. JVM规范1.1 位运算1.1.1 整型int原码:第一位符号位,0为正,1为负 反码:符号位不动,原码取反 补码 正数补码:和源码相同 负数补码:符号位不动,反码加1 example-6原码: 10000110反码: 11111001补码: 11111010为何使用补码 可以无歧义地表示0 不使用补码,将0看为正数:0000 0000 ...原创 2018-08-30 09:24:02 · 670 阅读 · 0 评论 -
深入理解Java虚拟机(一)
一、运行时数据区域 1、程序计数器:当前线程执行字节码的行号指示器(通过改变计数器的值来选择下条需要执行的字节码指令) 每个线程有独立的程序计数器(线程私有,为了切换线程时能恢复到挣钱的执行位置) 如果执行java方法,计数器记录正在执行的字节码指令地址。如果执行的是Native方法,计数器为空。 唯一没规定任何OutOfMemoryError情况的区域。2、虚拟机栈为...原创 2018-11-25 16:46:39 · 344 阅读 · 0 评论 -
Java虚拟机5大核心知识点
1、JVM的基本特性1.1 基于栈(Stack-based): 不同于Intel x86和ARM等比较流行的计算机处理器都是基于寄存器(register)架构,JVM是基于栈执行的。1.2 符号引用(Symbolic reference): 编译后的.class文件中,除基本类型外的所有Java类型都是通过符号引用取得关联的,而非显式的基于内存地址的引用。【符号引用以一组符号来描述所引...原创 2018-12-07 17:38:53 · 815 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记
第二章 Java 内存区域与内存溢出异常内存区域-- from 姜志明对象创建加载类 若已经在内存中则跳过。 类加载完以后就可以确定对象所需的空间大小 // TODO why? 分配内存 根据 GC 回收算法的不同,分配方式略有区别。 标记整理算法,使用空闲列表 带压缩的算法,使用指针碰撞(已分配和未分配内存间由指针分隔) 内存清零 对象初...原创 2018-12-08 20:11:16 · 436 阅读 · 0 评论 -
深入理解Java虚拟机(二)
一、编译和代码优化1、编译器优化-泛型:1、泛型出现之前存在的问题:所有对象的类型都继承自Object,虚拟机只有到运行时才能知道这个Object具体是什么类型,在编译期是无法检查这个Object是否强制转型成功,会将ClassCaseException的风险转移到程序运行期。2、泛型的作用:通过泛型,编译器可以在编译阶段发现类型不一致的问题3、泛型擦除:将Java代码编译成...原创 2018-12-07 13:35:41 · 270 阅读 · 0 评论 -
究竟什么是Java虚拟机(JVM)?
我们都知道,在Windows上,软件包后缀有exe,而苹果的Mac OS X系统上没有安装exe。类似地,Mac OSX系统上的软件安装包是dmg后缀,不能安装在Windows系统上。为什么不能安装不同系统上的软件,因为操作系统的底层实现是不同的。对于Windows系统,exe后缀的软件代码被编译成能被Windows系统识别的机器代码。对于Mac OSX系统,最后将DMG后缀的软件代码编译为M...原创 2018-12-15 11:56:02 · 3904 阅读 · 0 评论 -
从源代码到机器代码,Java语言中发生了什么?
在上一篇文章中,我们讨论了无论代码是用什么语言编写的,它最终都毫无例外地运行在机器代码中。那么Java语言中发生了什么,从源代码到机器代码?这就是我们今天要讨论的。如下图所示,编译器可以分为前端编译器、JIT编译器和AOT编译器。我们一个接一个地谈吧。前端编译器:源代码到字节码正如我们前面所说的,对于Java虚拟机,实际输入是字节码文件,而不是Java文件。那么,实际上如何将Jav...原创 2018-12-15 14:35:56 · 3754 阅读 · 0 评论 -
为什么要学习Java虚拟机?
像很多人一样,我第一次接触Java虚拟机只是因为它需要面试,所以我不得不认真地看一看。很多人回答了为什么他们要学习虚拟机的问题:因为面试。但经过多年的学习和实践,我发现学习虚拟机不仅仅是关于面试,而且是对Java语言的深入理解,并为未来的在线问题奠定基础。首先,让我来谈谈我的第一点:学习Java虚拟机对Java语言的深入理解。对于刚工作了一两年的朋友来说,每个API都不熟悉,自然不会深入到Ja...原创 2018-12-10 21:05:16 · 1450 阅读 · 0 评论 -
Java内存区域总结(堆、栈、方法区等)
1. JVM 运行时数据区 1. 程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。 每条线程都有一个独立的程序计数器,各条...原创 2018-12-17 16:49:54 · 775 阅读 · 0 评论 -
Java虚拟机(JVM)之字节码文件结构
我们早先提到Java虚拟机使用字节码来实现跨平台的设想。无论是什么系统,我们都可以使用Java虚拟机来解释和执行字节码文件。但实际上,字节码有一套规范,字节码的格式是“Java虚拟机规范”。Java虚拟机规范规定了Java虚拟机结构、类类文件结构、字节码指令等。类文件结构是需要理解的内容之一。字节码文件结构是一组基于8位字节的二进制流。数据项按严格的顺序排列在Class文件中,并且紧凑,不添加...原创 2018-12-23 10:23:22 · 624 阅读 · 0 评论 -
Java虚拟机的历史
当谈到Java虚拟机时,许多人把它们等同于热点虚拟机。但实际上,除了HotSpot之外,还有Sun Classic VM、Exact VM、BEA JRocketit、IBM J9等等。今天我们将简要回顾Java虚拟机的历史。虚拟机始祖:Sun Classic1996年1月23日,Sun发布了JDK 1.0,带有自己的虚拟机Classic VM。然而,该虚拟机具有仅使用纯解释器来执行Jav...原创 2018-12-11 21:43:48 · 619 阅读 · 0 评论 -
JVM内存模型详解
什么是JVM内存区域分区事实上,这个问题很简单。当JVM运行我们编写的代码时,它必须使用多个内存空间、不同的内存空间来放置不同的数据,然后与我们编写的代码流协作,这样我们的系统才能运行。例如,我们现在知道JVM将类加载到内存中以进行后续操作。所以我问你,这些类在被加载到内存之后会去哪里?你想过这个问题吗?所以在JVM中必须有一个内存区域来存储我们编写的类。包括我们定义的成员变量、类...原创 2019-07-28 13:55:16 · 1135 阅读 · 0 评论 -
思维导图学Java虚拟机
说明本篇文章是对周志明的《深入理解Java虚拟机》的读书笔记,思维导图使用Mindjet MindManager。曾经看到过这样一句话:关于教育,有一个经典的定义是:把在学校里学到的东西全部忘掉,最终留下的东西。我觉得读书也是一样,也可以套用上面的句式:关于读书,有一个经典的定义是:把在书中学到的东西全部忘掉,最终留下的东西。这次研读《深入理解Java虚拟机》,是为了对...原创 2018-08-29 09:04:19 · 429 阅读 · 0 评论 -
Java虚拟机 —— 垃圾回收机制
在Java虚拟机中,对象和数组的内存都是在堆中分配的,垃圾收集器主要回收的内存就是再堆内存中。如果在Java程序运行过程中,动态创建的对象或者数组没有及时得到回收,持续积累,最终堆内存就会被占满,导致OOM。JVM提供了一种垃圾回收机制,简称GC机制。通过GC机制,能够在运行过程中将堆中的垃圾对象不断回收,从而保证程序的正常运行。垃圾对象的判定我们都知道,所谓“垃圾”对象,就是指我们在...原创 2018-08-24 08:07:05 · 520 阅读 · 1 评论 -
JVM知识点总览
jvm 总体梳理jvm体系总体分四大块:类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。公众号内回复:”jvm”,可查看大图。类的加载机制主要关注点:什么是类的加载 类的生命周期 类...原创 2018-08-15 09:11:24 · 496 阅读 · 0 评论 -
Java虚拟机:什么是Java
前言让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/: 97%的企业桌面运行Java 美国有89%的桌面(或计算机)运行Java 全球有900万Java开发人员 开发人员的头号选择 排名第一的部署平台 有30亿部移动电话运行Java 100%的蓝光盘播放器附带了Java ...原创 2018-08-13 10:47:49 · 338 阅读 · 0 评论 -
Java虚拟机:Java内存区域及对象
几个计算机的概念为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。1、计算机存储单位从小到大依次为位Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为2的10次方,即: 1Byte = 8bit 1K = 1024Byte 1M = 1024K 1G = 1024M ...原创 2018-08-13 15:54:55 · 386 阅读 · 1 评论 -
Java虚拟机(JVM)学习之GC
谈到JVM,大家都知道GC(Garbage Collection),GC这个话题说浅了就一句话--JVM自动垃圾收集,说深了就无止尽了,回收算法,各种收集器,gc类型,gc触发点....等等,作者也是略懂皮毛,这里给大家推荐一个知乎上比较活跃的JVM大牛,RednaxelaFX,是专门做JVM开发的,业界号称"R大"。放个传送门:R大鉴于作者才学疏浅,这篇博文还是准备用通熟易懂的话把作者自己对G...原创 2018-08-18 16:33:24 · 442 阅读 · 0 评论 -
JVM总体概述
前言JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上一次编译,多次运行,具有跨平台性。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。...原创 2018-08-16 07:25:55 · 483 阅读 · 0 评论 -
思维导图学Java虚拟机
说明本篇文章是对周志明的《深入理解Java虚拟机》的读书笔记,思维导图使用Mindjet MindManager。曾经看到过这样一句话:关于教育,有一个经典的定义是:把在学校里学到的东西全部忘掉,最终留下的东西。我觉得读书也是一样,也可以套用上面的句式:关于读书,有一个经典的定义是:把在书中学到的东西全部忘掉,最终留下的东西。这次研读《深入理解Java虚拟机》,是为了对...原创 2018-08-22 11:57:04 · 395 阅读 · 0 评论 -
Java虚拟机 —— 类的加载机制
我们知道class文件中存储了类的描述信息和各种细节的数据,在运行Java程序时,虚拟机需要先将类的这些数据加载到内存中,并经过校验、转换、解析和初始化过后,最终形成可以直接使用的Java类型。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分统称为连接。类的生命周期 类的加载机...原创 2018-08-27 07:40:11 · 353 阅读 · 0 评论 -
Java虚拟机(JVM)你只要看这一篇就够了!
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正...原创 2018-08-27 10:06:00 · 483 阅读 · 0 评论 -
Java虚拟机(JVM)你只要看这一篇就够了!
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正...原创 2018-08-23 08:18:46 · 841 阅读 · 0 评论 -
JVM知识点总览
jvm 总体梳理jvm体系总体分四大块:类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。公众号内回复:”jvm”,可查看大图。类的加载机制主要关注点:什么是类的加载 类的生命周期 类...原创 2018-08-23 17:24:11 · 497 阅读 · 0 评论 -
Java虚拟机内存管理
对于Java程序员来说,在虚拟机自动内存管理机制帮助下,不需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和溢出方面的问题。一旦出现内存泄漏和溢出问题,如果不了解虚拟机怎样使用内存的,那么排查错误将会成为一项异常艰难的工作。运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(Java S...原创 2018-08-28 10:17:31 · 660 阅读 · 0 评论 -
Java虚拟机学习笔记整理
本文内容来源于《深入理解Java虚拟机》一书,非常推荐大家去看一下这本书。1、垃圾回收要解决的问题垃圾收集(Garbage Collection,GC),要设计一个GC,需要考虑解决下面三件事情:(1)哪些内存需要回收?(2)什么时候回收?(3)如何回收? 哪些内存需要回收?根据《Java内存区域模型、对象创建过程、常见OOM》中介绍的java内存模型,其中,程序计...原创 2018-08-21 07:40:49 · 388 阅读 · 0 评论 -
Java虚拟机(JVM)你只要看这一篇就够了!
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正...原创 2018-08-14 12:55:02 · 720606 阅读 · 123 评论