本文主要是针对Jvm相关资料的收集整理,待完善
1:对象定位
对象定位技术有2种
第一种:通过句柄访问
原文写道
1:如果使用句柄访问的话,Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据的具体各自的地址信息。如图1所示
图片出处:http://www.infoq.com/cn/articles/jvm-hotspot
第二种,直接通过指针访问
图片出处:http://www.infoq.com/cn/articles/jvm-hotspot
2中定位方法的优缺点对比
原文写道
这两种对象访问方式各有优势,使用句柄来访问的最大好处就是reference中存储的是稳定句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。
使用直接指针来访问最大的好处就是速度更快,它节省了一次指针定位的时间开销,由于对象访问的在Java中非常频繁,因此这类开销积小成多也是一项非常可观的执行成本。从上一部分讲解的对象内存布局可以看出,就虚拟机HotSpot而言,它是使用第二种方式进行对象访问,但在整个软件开发的范围来看,各种语言、框架中使用句柄来访问的情况也十分常见。
垃圾回收技术是如何跟这些对象关联的呢,如何标记的呢?
2:垃圾回收
在C++中对象的创建(New)和销毁(Delete)由程序员自己判定。当然这2个操作都依赖于指针,有很高的灵活性,但是也很容易出问题,出现野指针引发内存泄露的几率很高。而且指针,引用等比较难于理解和应用。
在java、.Net等基于虚拟机的语言中摈弃了这些概念,而由虚拟机来回收我们不用的对象(堆上的)。
虚拟机是怎么知道这个对象我们不在使用了呢?常用的对象存活判定有2种方式。
方法一:
引用原文
引用计数(Reference Counting)
引用计数算法的大致思想是给每个对象一个计数器,每当引用它是计数器+1,引用失效时-1.我们看这个算法还是比较高效的。(计数器的操作是如何做到的呢?)
主要缺点:
其中最主要原因是它没有一个优雅的方案去对象之间相互循环引用的问题:当两个对象互相引用,即使它们都无法被外界使用时,它们的引用计数器也不会为0。
方法二:
写道
可达性分析(Reachability Analysis)
不够深入,待完善下,先算是资料收集贴吧
参考文档:
The Java Virtual Specification http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
Hotspot虚拟机对象探秘 http://www.infoq.com/cn/articles/jvm-hotspot
Jvm内存回收与实现 http://www.infoq.com/cn/articles/jvm-memory-collection
Garbage Collection http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
http://rednaxelafx.iteye.com/blog/1044951
分享到:
相关推荐
本文根据《深入理解Java虚拟机》书籍内容及作者理解,总结了JVM相关的知识点,分享如下: 一、JVM内存区域 JVM在运行时,将内存空间分为若干个区域,主要包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器五...
总结来说,理解和掌握JVM内存区域的划分以及如何避免内存溢出是Java开发中至关重要的知识点,这有助于优化程序性能和解决运行时的内存问题。通过深入学习JVM的内存管理机制,开发者可以更好地控制和调优Java应用程序...
### JVM详解资料核心知识点 #### Java相关 - **Java定义**:Java是一种广泛使用的面向对象的编程语言,设计初衷是为了实现“一次编写,到处运行”的跨平台能力,这得益于其运行环境——Java虚拟机(JVM)的存在。 ...
Java虚拟机(JVM)是Java程序的核心组成部分,它提供了跨平台的运行环境,...总之,深入理解和掌握JVM的这些核心知识,对于Java开发人员来说,不仅能提高代码质量,还能有效解决性能问题,提升应用程序的稳定性和效率。
Java的JVM(Java Virtual Machine)是Java程序运行的基础,它是一个虚拟的...掌握这些JVM相关知识点,不仅能够帮助Java开发者在面试中脱颖而出,也能在实际开发中更好地调试和优化应用程序,提高软件性能和稳定性。
这个压缩包“JVM相关文档资料.rar”很可能包含了一系列关于JVM的详细文档,帮助我们深入理解其工作原理、内存管理、性能优化等方面的知识。 1. **JVM结构**:JVM主要由类加载器、运行时数据区、执行引擎、本地方法...
Java虚拟机(JVM)是Java程序运行的基础,它提供了内存管理、类...理解这些JVM知识点对于优化Java应用性能、排查内存泄漏等问题至关重要。通过不断学习和实践,开发者可以更好地驾驭JVM,确保Java程序高效稳定地运行。
Java虚拟机(JVM)是Java程序的核心,它负责运行Java字节码并管理程序的内存。JVM的架构包含了四个主要部分:类装载子系统(Class Loader)、执行引擎(Execution Engine)、运行时数据区(Runtime Data Area)以及...
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
本篇文章将深入探讨JVM的基础知识,包括它的架构、内存模型、类加载机制以及垃圾收集等核心概念。 首先,JVM的架构主要包括以下几个部分: 1. **类加载器(ClassLoader)**:负责加载类文件到JVM中。类加载器分为...
R大作为国内JVM领域的权威专家,分享了一系列与JVM相关的知识点,涉及高级语言虚拟机的基础概念、重要书籍推荐、编译器设计与优化等多个方面。这些内容不仅对初学者友好,也为专业人士提供了深入理解JVM机制的机会。...
Java虚拟机(JVM)是Java...掌握这些JVM相关知识对于Java开发人员尤其重要,它们不仅出现在面试中,也是解决实际问题、提升程序性能的关键。理解JVM的工作原理和优化技巧,可以使你编写出更高效、更稳定的Java代码。
JVM的性能优化是提升Java应用效率的关键环节,涉及到内存管理、垃圾收集、线程调度等多个方面。** 一、JVM内存结构 1. **堆内存**:Java对象的主要存储区域,分为新生代和老年代,新生代又细分为Eden区和两个...
这个“jvm-training”资料包涵盖了JVM的核心概念、内存管理、垃圾回收机制、性能优化等方面的知识。 1. **JVM架构** - 类加载器:JVM通过类加载器将.class文件加载到内存,分为引导类加载器、扩展类加载器和应用...
标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...
本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...
个人网站可能提供了一些关于JVM源码分析的教程和资源,对于深入学习JVM的运行机制,这是一个很好的参考资料。通过结合理论知识与实际源码阅读,可以更好地掌握Java编程的精髓,提高解决复杂问题的能力。
JVM详细的知识点总结,思维导图 1.类加载器子系统 2.Hotspot的内存详情 3.HotSpot虚拟机对象探秘 4.垃圾收集器
它不仅向读者提供了JVM垃圾收集机制的理论知识,还提供了实操指导,比如如何选择和调优垃圾收集器以及使用哪些工具来评估垃圾收集器性能。对于开发人员来说,掌握这些知识可以帮助他们编写出性能更优、稳定性更高的...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。了解JVM的工作原理对于...以上是对JVM工作原理的简要概述,深入研究这些知识点有助于开发者更好地理解和优化Java应用的性能。