今天是jvm学习的第二天,继续坚持吧,才刚刚开始。
一、垃圾收集算法,由于垃圾收集算法涉及大量的程序细节,而且每个平台的虚拟机操作内存的方法又各有不同,所以只介绍几种垃圾收集算法的思想。
(1)标记清除算法:先标记处需要回收的对象,然后统一收集,这种方法不好的地方是会产生大量不必要的碎片,当以后程序运行过程中需要分配较大的内存空间时无法找到足够连续的内存单元,从而引发新一轮的垃圾回收
(2)复制算法:为了解决标记清除算法的效率问题,出现了复制算法,它将可用内存分割为大小相等的很多块,每次只是用其中一块,当着一快的内存用完时,就把存活着的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。避免了内存碎片,这样的代价是将内存缩小为原来的一半。
(3)标记整理算法:和标记清楚算法的前半部分一样,但是标记之后,不是一下子对可回收的对象进行回收操作,而是将存活对象向一边移动,然后移除边界之外的可回收对象。
(4)分代收集算法:现代商业虚拟机的垃圾回收都采用分代收集,即按照对象的存活周期划分为新生代和老生带,在新生代中,对象存活率低,可以使用复制算法,以保证用最小的空间完成垃圾的回收。但是在老生带,对象的存活率高,可以使用标记清除算法或者标记整理算法。
二、垃圾收集器:
serial收集器:串行的收集方式,也就是说在收集的过程中,会停下其他工作线程,其实也就是几十毫秒最多一百毫秒的时间,只要不是频繁发生,这种方式还是很高效的。
parNew收集器:serial的多线程版本。
三、内存分配与回收策略
(1)对象优先在eden分配,如果发现不够了,会发生minorGC,而在gc期间如果发现survivor不足以存放,那么就会通过分配担保机制转移到老年代去。
(2)大对象直接进入老年代
(3)长期存活的对象将进入老年代
如果对象在eden出生并经过一次minorGC后仍然存活,并且能被survivor容纳的话,将被放到里面,并将对象年龄设置为1,对象在survivor每熬过一次GC,年龄就加1,当达到一定程度时,就会被晋升为老年代,因为新年代里存放的都是朝生夕灭的对象。
(4)动态对象年龄的判断,为了能更好的适应不同程序的内存状况,虚拟机并不总是要求对象年龄达到峰值才晋升老年代,而是在survivor空间中相同年龄所有对象的大小总和大于survivor空间的一半,年龄大于或者等于的对象就可以晋升老年代了。
三、虚拟机性能监控与故障处理工具
四、jvm性能调优实践(暂且掠过,目前还接触不到这方面的知识)
五、无关性,平台无关性和语言无关性的基石都是虚拟机和字节码存储格式,只要符合class文件的结构,就可以在jvm上运行
1、class文件的结构
class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件中,中间没有添加任何分隔符。当遇到需要占用8位字节以上的空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。
分享到:
相关推荐
在Java基础学习的第二天,主要涵盖了以下几个重要知识点...通过上述内容的学习,可以看出Java基础学习第二天的内容是非常全面和基础的,涵盖了编程语言的多个核心概念和实践技巧,为后续深入学习Java打下了坚实的基础。
Java学习第二天笔记 本笔记主要讲解Java的概述、环境搭建、语言特点、执行机制、设计理念、开发工具包、运行环境、虚拟机等知识点。 一、Java概述 Java是一种面向对象的程序设计语言,由Sun Microsystems于1995年...
通过学习"Java基础第25天-06.JVM结构1"的课程,你将能够更好地理解Java程序的运行机制,为编写高效、稳定的代码打下坚实的基础。这个视频资源可能包含详细的讲解和示例,帮助你深入掌握这些概念,并提升你的Java开发...
### JAVA开发学习第一天知识点梳理 #### 一、计算机基本组成及其用途 - **计算机定义**:计算机是一种能够根据预设的程序自动高速处理数据的电子设备。它由硬件和软件两部分组成。 - **硬件**包括中央处理器(CPU)...
2. **Java复习第二天**:可能深入到控制流程,包括条件语句(if...else, switch)和循环(for, while, do...while),这是编写任何程序的基础。 3. **Java复习第三天**:可能会讲解数组,这是存储和处理大量数据的...
### Java基础学习知识点第一天 #### 一、理解JVM、JRE与JDK的作用及其相互关系 1. **Java虚拟机(JVM)**:是Java程序的运行环境,它负责将Java字节码转换为特定平台的机器语言进行执行。JVM提供了一套独立于硬件的...
在第二天的学习中,我们了解到对4取反再加1的结果是-3。基本数据类型包括int、char和boolean,而String、Math和Boolean(大写)是对象或类。在表达式中,`char`可以是字符、ASCII值或Unicode值。其取值范围取决于...
**第二天:高级特性** 1. **扩展函数与属性**:学习如何为已有类添加新的功能,无需继承或使用装饰者模式。 2. **数据类与构造函数**:掌握数据类的自动实现equals()、hashCode()和toString()方法,以及如何使用...
这个“毕向东_Java基础视频教程第01天-02-Java的跨平台性.zip”压缩包文件,显然是针对初学者设计的一节Java入门课程,旨在帮助零基础的学习者理解并掌握Java的这一核心特性。 首先,我们要了解什么是Java的跨平台...
《Java 2编程21天自学通》第二版是一本为初学者设计的Java编程教程,旨在帮助读者在短短的21天内掌握Java 2(J2SE)的基础知识。尽管存在争议,但该书因其对Java语言的清晰解释和易懂的表述而受到部分读者的认可。...
#### 第二天:Java基本语法1 **目标:** - 掌握Java的基本语法结构。 - 熟悉Eclipse集成开发环境的使用。 **Eclipse简介:** Eclipse是一个开源的集成开发环境(IDE),广泛用于Java开发。它提供了丰富的功能,如...
5. **数组**:用于存储同类型数据的集合,有单维数组、二维数组等。 6. **字符串**:String类是Java中处理文本的重要工具,它不是原始类型,但有特殊的处理方式。 【JVM】Java虚拟机(JVM)是Java程序运行的平台,...
《21天学通 Java 2 第二版》是一本为初学者精心设计的Java编程教程,旨在帮助读者在短短21天内掌握Java 2的核心概念和技术。这本书的中英文双语版本使得国内外的学习者都能无障碍地进行学习,无论你的母语是中文还是...
在Java学习的第二天,我们深入理解了JRE的构成,它是Java运行环境,包含了JVM(Java虚拟机)和其他必要的类库文件。这些类库文件,如`tools.jar`,对于Java程序的运行至关重要。Java中,我们常用`jar`命令来打包和...
教学安排分为两天进行,第一天覆盖Java基础知识和面向对象编程,第二天则涉及异常处理、面向应用的编程以及测试,确保学习者能全面掌握Java编程的基础和实践应用。 中创软件的这个Java培训教程特别强调了Java技术的...
Java初学者的学习之旅通常从了解基础语法和编程概念开始,"day01"这个标签暗示了这是学习的第一天,可能涵盖了最基础的内容。在提供的压缩包文件中,有两个文件:`Ellsworth.class` 和 `Ellsworth.java`。这两个文件...
2. 第二天,讲解Java数据库连接JDBC。 3. 第三天,学习EJB基础。 4. 第四天,深入会话Bean,探讨JTA和JTS。 5. 第五天,专注于实体Bean。 6. 第六天,研究消息Bean(JMS)。 7. 第七天,学习Servlet。 8. 第八天,...
此外,21天学通Java+2(第二版)可能增加了更多进阶话题,如集合框架(List、Set、Map等)、IO流、多线程、网络编程、数据库连接(JDBC)以及Java Swing或JavaFX这样的图形用户界面(GUI)开发。这些内容对于成为一...
Java基础学习的第二阶段中,第16天的每日作业主要涉及了两个核心知识点:JUnit测试框架的使用和Java注解的理解与应用。下面将对这两个主题进行详细阐述。 **1. JUnit框架** JUnit是一个流行的Java单元测试框架,它...