JVM 详解】的更多相关文章

JVM详解总结 1.JVM内存模型 1.1 运行时数据区内存分布实例 1.2 类加载的生命周期 2.物理内存与虚拟内存 3.Java中需要使用内存的组件 3.1 Java堆 3.2 线程 3.3 类和类加载器 3.4 NIO 3.5 JNI 4.JVM内存结构 5.JVM内存回收策略 5.1 回收原则 5.2 引用状态 5.3 方法区的垃圾回收 5.4 垃圾收集算法 5.5 垃圾收集器 5.6 GC 5.7 最终确认 6.对象的访问 6.1 E堆内存模型 6,2 new 6.3 Object 1…
概念 数据类型 Java 虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置. 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括:类类型,接口类型和数组. 堆与栈 堆和栈是程序运行的关键,很有必要把他们的关系说清楚.  栈是运行…
1.0,jdk与jre和jvm的区别: JDK(Java Development Kit):指的是Java开发工具集.JDK是整个Java的核心,包括了Java基础类库.Java运行环境(JRE)和Java开发工具.是做Java开发必须要安装的. JRE(Java Runtime Environment):指的是Java运行时环境.Java程序运行时必需要JRE的支持.如果系统只安装JRE的话,则意味着系统可以跑任何Java程序,但不能做Java开发. JVM (Java Virtual Mac…
目录 简介 class文件中的常量池 运行时常量池 静态常量详解 String常量 数字常量 符号引用详解 String Pool字符串常量池 总结 简介 JVM在运行的时候会对class文件进行加载,链接和初始化的过程.class文件中定义的常量池在JVM加载之后会发生什么神奇的变化呢?快来看一看吧. class文件中的常量池 之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢? 字符串常量,类和接口名字,字段名,和其他一些在class中引用的…
JDK.JRE.JVM JDK包含JRE,而JRE包含JVM JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库.Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的…
一.JVM内存管理 1.1JVM运行时数据区 1.1.1程序计数器:记录当前线程正在执行的字节码指定的地址(行号) 为什么需要它:程序容易被打断 1.1.2虚拟机栈:存储当前线程运行方法时所需要的数据.指令.返回地址 1.1.3本地方法栈:和虚拟机栈类似,存储的是native方法 1.1.4方法区:类信息.常量(1.7移至堆).静态变量.JIT(编译好的代码等数据 1.7移至堆) 1.1.5堆:存放所有实例对象和数组 设置:启动时分配的内存:-Xms,最大内存 -Xmx 1.2JVM内存模型 1…
目录 简介 一个简单的class ClassFile的二进制文件 class文件的密码本 magic version 常量池 描述符 access_flags this_class和super_class interfaces_count和interfaces[] fields_count和fields[] methods_count和methods[] attributes_count和attributes[] 总结 简介 一切的一切都是从javac开始的.从那一刻开始,java文件就从我们肉…
目录 简介 本地变量的生命周期 举例说明 优化的原因 总结 简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢? 带着这个问题我们来看一下今天的这篇文章. 本地变量的生命周期 在类中,变量类型有类变量,成员变量和本地变量. 本地变量指的是定义在方法中的变量,如果我们在方法中定义了一个变量,那么这个变量的生命周期是怎么样的呢? 举个例子: public void test(){ Object object = new Object();…
目录 简介 什么是Intrinsic Methods 内置方法的特点 多样性 兼容性 java语义的扩展 Hotspot VM中的内置方法 intrinsic方法和内联方法 intrinsic方法的实现 Graal 总结 简介 内置方法是什么呢?它和inline method有什么关系呢?内置方法是怎么实现的呢?所有的问题都可以在本文找到答案. 什么是Intrinsic Methods 什么是内置方法呢? 维基百科给出的定义是这样的: 在计算机软件中,按照编译器理论,固有方法(或内置方法)是可在…
目录 简介 加载 运行时常量池 类加载器 链接 验证 准备 解析 初始化 总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化的过程. 这三个过程是怎么工作的呢?在本文中你将会找到答案. 加载 JVM可以分为三大部分,五大空间和三大引擎,要讲起来也不是特别复杂,先看下面的总体的JVM架构图. 从上面的图中,我们可以看到JVM中有三大部分,分别是类加载系统,运行时数据区域和Execution Engine. 加载就是根据特定…
一.JVM内存结构 1.1 内存结构---概略图 1.2 内存结构--详细图 二.类加载器子系统的作用 类加载器子系统负责从文件系统或网络中加载.Class文件,文件需要有特定的标识(cafe babe). ClassLoader只负责.Class文件的加载,至于它是否可以运行,由执行引擎决定. 加载的类信息存放于一块被称为"方法区"的内存空间.除了类信息外,方法区还会存放运行时常量池信息,可能还包括字符串字面量(字面量指的是固定值,初始值)和数字常量(这部分常量信息是.Class文件…
前言 如果在文中用词或者理解方面出现问题,欢迎指出.此文旨在提及而不深究,但会尽量效率地把知识点都抛出来 一.JVM的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范.通过在实际的计算机上仿真模拟各类计算机功能实现··· 好,其实抛开这么专业的句子不说,就知道JVM其实就类似于一台小电脑运行在windows或者linux这些操作系统环境下即可.它直接和操作系统进行交互,与硬件不直接交互,可操作系统可以帮我们完成和硬件进行交互的工作. 1.…
Test https://www.cnblogs.com/yrxing/p/14651346.html#gc的基础知识 https://www.cnblogs.com/yinzhengjie/p/9279283.html https://github.com/weolwo/jvm-learn https://www.cnblogs.com/xiaopaipai/p/10522794.html https://www.zhihu.com/question/421237964/answer/1764…
一.概述 1.介绍 类比一下:红框就好比内存的运行时数据区,在各自不同的位置放了不同的东西.而厨师就好比执行引擎. 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行.不同的JVM对于内存的划分方式和管理机制存在着部分差异(典型的不同,就是针对方法区).结合JVM虚拟机规范,来探讨一下经典的JVM内存布局.运行时数据区-详图: 红框处有变化,叫方法区,JDK7…
一.堆 1.介绍 Java运行程序对应一个进程,一个进程就对应一个JVM实例.一个JVM实例就有一个运行时数据区(Runtime),Runtime里面,就只有一个堆,一个方法区.这里也阐述了,方法区和堆是一个进程一份.而一个进程当中,可以有多个线程,那就意味着一个进程中的多个线程会共享堆空间和方法区. 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.堆在JVM启动的时候被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间,堆内存大小是可以调节的. Java虚拟机规范规定…
一.概述 1.介绍 <Java虚拟机规范>中明确说明:尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩.但对于HotSpot JVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开. 所以,方法区看作是一块独立于Java堆的内存空间.官方文档: 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间和Java堆区一样,可以是不连续的.方法区的大小和堆一样,可选择固定大小或可扩展.方法区的大小决定了系统可以保持多少个类,如…
类加载过程 https://www.cnblogs.com/aqsaycode/p/14885023.html…
一.对象的实例化 1.创建对象的方式 2.创建对象的步骤 脑图:https://www.processon.com/view/link/61701a927d9c087040525226 3.对象属性赋值的步骤 ①属性的默认初始化--对应脑图中"创建对象的步骤"4 ②显式初始化--对应脑图中"创建对象的步骤"6 ③代码块中初始化--对应脑图中"创建对象的步骤"6 ④构造器中初始化--对应脑图中"创建对象的步骤"6 注意:②.③是…
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相关知识. 我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试与工作中"最亮的一颗星".本系列首发于微信公众号"程序新视界".下面,开启我们的第一篇文章<JVM之内存结构详解>. 学习也是要讲究方式方法的,本系列学习过程中会引导大家通过<费曼…
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符                            说明 0x00         nop                                什么都不做 0x01        aconst_null                   将null推送至栈顶 二.const系列 该系列命令主要…
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4810168.html [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾)…
JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 在充分理解了垃圾收集算法和执行…
GC的概念 GC:Garbage Collection 垃圾收集.这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出). 内存区域中的程序计数器.虚拟机栈.本地方法栈这3个区域随着线程而生,线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作,每个栈帧中分配多少内存基本是在类结构确定下来时就已知的.在这几个区域不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了.而Jav…
本文整理于  Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java内存空间包括四部分: 1.Java堆:所有类实例(成员变量)和数组的内存均从此处分配,它是线程共享的,参看Java VisualVM截图 2.Java栈  主要存储基本类型的变量(byte short int long char float double boolean).对象的引用变量和方法中的局…
类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java执行时系统组件,它负责在运行时查找和装入Class字节码文件.JVM在运行时会产生三个ClassLoader:根装载器.ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器).其中,根装载器不是ClassLoader的子类,它使用C++编写,因此我们在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar.charsets.jar等.ExtCl…
12年毕业到先在处理第一年外这几年纯属于打酱油,当初自学Java然后就出来找工作了,还有第一家面试就通过了挺幸运的 但之后的这段时间一直是处于吃老本的状态.最近心情真的很不好,各种黄老邪!一直处于堕落的状态,明知不可为而为之! 哎 想想就心碎!不跑题了,说了好撸码三十年,这才几年! 今天就整理下JVM的参数!相对而已JVM有很多参数,但对于一般开发人员执行知道和堆栈大小,GC.远程调试的参数即可. JVM Parameters 首先需要说明的是JVM的参数形式: -X 开头的参数都是非标准的参数…
http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: <深入理解Java虚拟机(第二版)>中的描述是下面这个样子的: Java中的内存分配: Java程序在运行时,需要在内存中的分配空间.为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特定的…
Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或…
一.运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域. 1.有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,所有的线程共享这些数据区. 2.第二种则是与线程一一对应,随线程的开始和结束而创建和销毁,线程之间相互隔离. Java虚拟机所管理的内存将会包括以下几个运行时数据区域 二.数据区详解 1.程序计数器(Program Counter Register) 也叫PC寄存器是一块较小的内存空间,它的作用是存储当前线程所执行的字节码的信号指示器.…