首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解JVM虚拟机---JVM内存管理

JVM内存分布以及作用 1.JVM 内存概述 程序计数器 Java虚拟机栈(Stack...Frame)栈帧 本地方法栈 堆(Heap):JVM管理的最大一块内存空间 运行时常量池(Runtime Constant Pool) 直接内存(Direct Memory) 2.程序计数器 ​ 程序计数器...,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。 ​...《Java虚拟机规范》对本地方法栈中方法使用的语言、使用方式与数据结构并没有任何强制规定,因此具体的虚拟机可以根据需要自由实现它,甚至有的Java虚拟机(譬如Hot-Spot虚拟机)直接就把本地方法栈和虚拟机栈合二为一...但是对于其他虚拟机实现,譬如BEA JRockit、IBM J9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一。

39720

深入理解JVM虚拟机 - JVM的初步了解

深入理解JVM虚拟机 - JVM的初步了解 概述: JVM的基础了解:了解什么是JVMJVM到底是什么 JVM的大致分区:侧重了解内存分区在类进行工作时候充当的角色。...程序结束,JVM进程停止。 注意:加载的细节在文章的后续章节进行解释。 下面为画图理解一下这个过程: ?...,正确之后才能交给jvm虚拟机进行运行。...准备总结:分配内存空间,对象默认值赋值 这里需要注意的是关于变量是否添加final的影响,下面的代码如果加入了final会在 准备阶段初始化,否则会在 初始化阶段才完成初始化动作,关于这一块完整细节在《深入理解...写在最后: 这是深入理解虚拟机的开篇,希望这个系列能完结吧。。。。。

57620
您找到你想要的搜索结果了吗?
是的
没有找到

java(5)-深入理解虚拟机JVM

编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。...在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。...JVM启动时被标记为启动类的类(简单理解为具有main方法的类)。...以上描述截取自: 《深入理解Java虚拟机:JVM高级特性与最佳实践》 作者: 周志明 五、Java 8: 从永久代(PermGen)到元空间(Metaspace) ---- 1、 从永久代(...1、解释执行 和一些动态语言类似,JVM可以解释执行字节码。Sun JDK采用了token-threading的方式,感兴趣的同学可以深入了解一下。

64010

深入理解JVM虚拟机 - jvm的对象分配策略

深入理解JVM虚拟机 - jvm的对象分配策略 概述: 书中对象优先在eden区分配实验与实际结果不符?...注意:本部分内容不建议手机上观看,建议PC端观看,另外强烈建议有条件的同学去翻一翻《深入理解JVM虚拟机》第三版,看一下关于对象优先在eden区域分配相关的部分内容,对于理解下文所说的差异更有帮助。...下面这段代码,只要随便百度一下eden区域分配的相关博客内容,基本可以翻到一大堆的类似内容,这段代码的出处就是《深入理解JVM虚拟机》。下面我们来看看这一部分代码实际运行情况和书中的出入对比结果。...程序默认使用:4303K 的内存 代码来源于深入理解JVM虚拟机,注意要使用serial收集器,个人测试版本为JDK8 [GC (Allocation Failure) [DefNew:...">=":"<", av_promo, max_promotion_in_bytes); } return res; } 总结: jvm对象分配这一块基本内容在《深入理解JVM虚拟机

34720

深入理解JVM虚拟机类加载机制

类初始化的时机 对于类加载过程的第一个阶段:加载,jvm规范中并没有进行强制约束其开始时机,可交由jvm的具体实现来自由把握。...虚拟机规范规定了在在加载阶段,jvm需要完成以下三件事情: 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时存储结构。...这三点要求不算具体,在jvm实现时灵活度很大。例如上面的第一条,它没有指明二进制字节流要从一个Class文件中获取,准确地说没有指明要从哪里获取、怎样获取。...数组类的加载 数组类本身不通过类加载器创建,它是由jvm直接创建的。...对于jvm的类加载机制来说,验证阶段是一个非常重要但不是一定必要(因为对运行期没有影响)的阶段。

40330

JVM-深入理解Java虚拟机

1.虚拟机字节码执行引擎 1)物理机和虚拟机的执行引擎区别 物理机:直接建立在处理器、硬件、指令集、操作系统层面上 虚拟机:执行引擎是自己实现的,可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式...2)虚拟机字节码执行引擎的概念模型 概念模型的建立为了统一执行引擎的外观,都是:输入字节码文件=>字节码解析=>输出执行结果 3)运行时栈帧结构 用于支持虚拟机进行方法调用和方法返回的数据结构,它是虚拟机运行时数据区中的虚拟栈的栈元素...技巧:使用恰当的变量作用域来控制变量回收才是最优雅的解决方法 技巧:不使用的对象手动赋值为null 2.虚拟机类加载机制 1)虚拟机如何将Class 加载到内存中的?...,其他的类加载器都是由Java语言实现的,独立于虚拟机外部; c)分类:启动类加载器(JAVA_HOME\lib)、扩展类加载器(JAVA_HOME\lib\ext)、应用程序类加载器(ClassPath...(内存模型、CMS收集器) 3.Java内存区域 1)内存区域划分 a)方法区、虚拟机栈、本地方法栈、堆、程序计数器、执行引擎、本地库接口、本地方法库 b)线程共享区域:方法区、堆;线程私有区域:

39820

深入理解JVM(③)虚拟机的类加载时机

前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为虚拟机的类加载机制。...类加载的时机 一个类型从被加载到虚拟机内存中开始,到卸载除内存为止,它的生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution...在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规则》中并没有进行强制约束,但是对于初始化阶段《Java虚拟机规范》则是严格规定了有且只有以下六种情况必须立即对类进行“初始化”。...当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。...但是这段代码里面触发了另一个名为“[Lcom.jimoer.classloading.FatherClass”的类的初始化阶段,它是一个由虚拟机自动生成的、直接继承与java.lang.Object的子类

73310

深入理解JVM(③)虚拟机的类加载过程

并且也介绍了类的加载时机,下面我们将介绍一下虚拟机中类的加载的全过程。主要是类生命周期的,加载、验证、准备、解析和初始化这五个阶段所执行的具体动作。...《Java虚拟机规范》对这三点要求其实并不是特别具体,这样留给虚拟机实现和Java应用的灵活度都是相当大的。仅第一条,获取二进制字节流,并没有有指出从哪里获取,如何获取。...加载阶段即可以使用Java虚拟机里内置的引导类加载器完成,也可以由用户自定义的类加载器去完成。...验证 验证这一阶段的目的是确保Class文件的字节流中包含的信息符合《Java虚拟机规则》的全部约束要求,保证这些信息被当作代码运行后不会危害虚拟机自身安全。...符号引用验证 最后一个阶段的校验行为发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在连接的第三个阶段——解析阶段发生。

35251

深入理解Java虚拟机Jvm性能调优

本篇内容包括:Jvm 性能调优简介;根据需求目标进行 Jvm 调优规划(即 调优的目标、调优的步骤);Jvm 调优参数、命令、工具;以及 Java 中的内存泄露问题的详解… 一、Jvm 性能调优简介...-l : 输出主类或jar的完全路径名 -v : 输出jvm参数 -m : 输出jvm启动时传递给main()的参数 jstat : 用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载...gcold:统计 gc时,老年代的情况 -gcoldcapacity:统计 gc时,老年代 heap容量 -gcpermcapacity:统计 gc时, permanent区 heap容量 vmid是Java虚拟机...interval, 间隔时间(单位为秒或毫秒) count,打印次数,如果省略则打印无数次 jmap(Java Virtual Machine Memory Map): jdk提供的一个生成java虚拟机的堆转储快照...,为虚拟机内每一条线程正在执行的方法堆栈的集合,用于定位线程出现长时间停顿的原因,诸如死锁、死循环等。

1.1K30

深入理解Java虚拟机(JVM) --- 垃圾收集算法(中)

当发现Eden+Survior1的内存即将满时,JVM会发起一次Minor GC,清除掉废弃的对象, 并将所有存活下来的对象复制到另一块Survior2中....在发生 minor gc 前,虚拟机会检测老年代最大可用连续空间是否大于新生代所有对象总空间 若成立,minor gc 可确保安全 若不成立,JVM会查看 HandlePromotionFailure是否允许担保失败...我们平时所使用的引用就是强引用 类似A a = new A(); 即通过关键字new创建的对象所关联的引用就是强引用 只要强引用还存在,该对象永远不会被回收 软引用 一些还有用但并非必需的对象 只有当堆即将发生OOM异常时,JVM...总结 Java虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象。它从一系列GC Roots出发,边标记边探索所有被引用的对象。...深入理解Java虚拟机(第2版) 深入拆解Java虚拟机

35300

深入理解JVM虚拟机---垃圾回收与内存分配

JVM内的垃圾回收器与内存分配策略 垃圾收集器与内存分配策略 概述 判断对象状态:介绍JVM是如何判断判断对象的状态(即一个对象是否应该被回收) 垃圾回收算法:回收对象的几种算法...垃圾回收器:JVM现有的几种垃圾回收器 判断对象状态 引用计数法 ​ 很多教科书判断对象是否存活的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一...关于方法区回收 ​ 有些人认为方法区(如HotSpot虚拟机中的元空间或者永久代)是没有垃圾收集行为的,《Java虚拟机规范》中提到过可以不要求虚拟机在方法区中实现垃圾收集,事实上也确实有未实现或未能完整实现方法区类型卸载的收集器存在...版 的虚拟机支持。 ​...参考 《深入理解java虚拟机

43530

深入理解JVM虚拟机3:垃圾回收器详解

/github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《深入理解...该系列博文会告诉你如何从入门到进阶,一步步地学习JVM基础知识,并上手进行JVM调优实战,JVM是每一个Java工程师必须要学习和理解的知识点,你必须要掌握其实现原理,才能更完整地了解整个Java技术体系...推荐阅读 (点击标题可跳转阅读) 夯实Java基础系列16:一文读懂Java IO流和常见面试题 夯实Java基础系列15:Java注解简介和最佳实践 夯实Java基础系列14:深入理解Java枚举类...夯实Java基础系列11:深入理解Java中的回调机制 夯实Java基础系列10:深入理解Java中的异常体系 夯实Java基础系列9:深入理解Class类和Object类 夯实Java基础系列...8:深入理解Java内部类及其实现原理 夯实Java基础系列7:一文读懂Java 代码块和代码执行顺序 一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

34820

深入理解Java虚拟机》(五)JVM调优 - 工具

JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监控主要体现在...4.类 该页面其实和线程页有些相似,不过显示的是JVM加载类的信息 ? 5.VM 这个其实没必要细说,看图就明白,显示了当前JVM的各方面信息 ? 6.MBeans ?...未完待续 《深入理解Java虚拟机JVM高级特性与最佳实践_周志明.高清扫描版.pdf》 下载地址:链接:http://pan.baidu.com/s/1miBQCBY 密码:9kbn 推荐阅读 《深入理解...Java虚拟机》(一)Java虚拟机发展史 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具...《深入理解Java虚拟机》(五)JVM调优 - 工具 《深入理解Java虚拟机》(六)堆内存使用分析,GC 日志解读 Contact 作者:鹏磊 出处:http://www.ymq.io Email:

1.1K101

深入理解JVM - Shenadoah

深入理解JVM - Shenadoah 前言 zgc和shenadoah的收集器是面向未来的收集器,目前还处于不断完善的阶段,虽然我们平时可能不太用的上,但是了解和基本掌握它是必须的,关于这一块网上的内容确实比较少...❝写屏障的概念可以看专栏之前的文章:深入理解JVM - Hotspot算法细节#写屏障 ❞ 当然Shenandoah开发者也意识到这个问题,在「JDK13的」版本中,改用了基于“引用访问屏障”的方式解决读屏障的问题...❝从这里也可以看出来Redhat的开发团队在设计jvm垃圾收集器上的经验缺乏,但是可以及时调整解决问题。...❞ 工作过程: shenandoah的工作步骤可以划分为9个步骤,最新版本的shenandoah还在初始标记的步骤前面增加了三个步骤,简单理解为分代收集当中的Minor GC操作即可。...其他资料: Shenadoah垃圾收集器官网介绍 ❝Shenandoah收集器的JVM参数案例:java -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=

28010

深入理解JVM Note

堆又可以分为新生代和老年代,实际还有一个区域叫永久代,但是jdk1.7已经去永久代了,所以可以当作没有,永久代是当jvm启动时就存放的JDK自身的类和接口数据,关闭则释放。...理解GC日志 33.125:[GC[DefNew:3324K->152K(3712K),0.0025925 secs]3324K->152K(11904K),0.0031680 secs] 1 0 0.6...当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为“没有必要执行”。...标记-清除算法 (会产生空闲内存碎片) 标记-整理算法(防止产生内存碎片) 复制算法(效率最高,但是内存利用率低) JVM 中新生代使用复制算法,老年代使用标记整理算法。...虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制(运行时)。

30550
领券