《深入理解Java虚拟机》笔记2
都知道Java对内存是自动垃圾回收的,什么样的内存是可以回收的?这个问题是值得思考的。对象已死的判定方法有两种:(1)引用计数器法给对象添加一个引用计数器,有一个地方用到此对象,计数器加一。引用失效,计数器减一。这个判断方法实现应该简单,但是Java不用。因为对象间的循环引用不...
2024-01-10深入理解java的泛型
但是Java为了保证向下兼容性,它的泛型全部都是在编译期间实现的。编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种就叫做类型擦除。编译器在编译的过程中执行类型检查来保证类型安全,但是在随后的字节码生成之前将其擦除。这样就会带来让人困惑的结果。本文将会详细...
2024-01-10理解Java虚拟机体系结构
众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么。正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障。1.1 Java程序执行流程 Java程序的执行依赖于编译环境...
2024-01-10深入理解Java虚拟机之经典垃圾收集器
目录1. 综述1. 总述:2. 图示总述3. 应用中应如何做出选择?2. Serial收集器1. 简介2. 图解工作过程3.使用的垃圾收集算法4. 优点5. 缺点6. 主要应用场景3. ParNew收集器1. 简介2. 图解工作过程3. 使用的垃圾收集算法4. 补充概念5. 主要应用场景4. Parallel Scavenge收集器1. 简介2. 补充概念3. 图解工作过程4. 使用的垃...
2024-01-10java虚拟机原理:类加载过程详解
目录一、Java 类加载过程1、字节码编译2、加载3、连接4、初始化总结一、Java 类加载过程1、字节码编译编写好 Java 源码 Student.java ,使用 javac 将上述 Java 源码编译成 Class 字节码文件 Student.class ,2、加载加载 : 通过 " 类加载子系统 " 将该字节码文件 , 加载到 Java 虚拟机内存中 的 方法区 , 然后开始执...
2024-01-10深入理解java异常处理机制及应用
1. 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案、也不许执行代码看...
2024-01-10深入理解Java中的SPI机制
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编...
2024-01-10深入理解Java遗传算法
关于遗传算法的详细原理以及具体的定义这里就不多介绍,想了解的可以自行百度,下面就简单介绍下自己对遗传算法的理解,本文对基因的编码采用二进制规则。算法思想: 遗传算法参照达尔文的进化论,认为物种都是向好的方向去发展(适者生存),因此可以认为到足够的代数之后,得...
2024-01-10深入理解Java虚拟机二:垃圾收集与内存分配
垃圾收集:垃圾收集要完成三件事,包括哪些内存需要回收,什么时候回收及如何回收。1、需要回收的内存判定:没有引用指向原先分配给某个对象的内存时,则该内存是需要回收的垃圾 Java垃圾收集器在对内存进行回收之前,首先就是要确定这些对象哪些已经“死去”,对已经“死去”的...
2024-01-10《深入理解Java虚拟机》-- 对缓存的理解
此文转载自:https://blog.csdn.net/qq_39414348/article/details/113184169#commentBox不才,笔者第一次学习缓存,是在学习redis的时候,是在培训班学习了一些java的启蒙知识。但是在后来的深入学习之后,对缓存又有了新的认识。1.池...
2024-01-10Java 内存分配深入理解
Java 内存分配深入理解 本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。 进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上...
2024-01-10深入理解Java虚拟机_动力节点Java学院整理
什么是Java虚拟机Java程序必须在虚拟机上运行。那么虚拟机到底是什么呢?先看网上搜索到的比较靠谱的解释:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了...
2024-01-10深入理解java虚拟机(三)对象回收判断算法以及死亡过程
在堆里面存放着Java几乎所有的对象实例,垃圾收集器要进行垃圾回收,要做的第一步便是找出那些对象是需要回收的。常用的方法有两种。1、引用计数算法。为每一个对象添加一个引用计数器,每当有人持有对其的一个引用的时候,该计数器加1。这种算法(Reference Counting)实现简单,判断效率高,...
2024-01-10深入理解java虚拟机【Java Class类文件结构】
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作...
2024-01-10深入理解java中的null“类型”
本文研究的主要是java中的null“类型”的相关实例,具体介绍如下。先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根据官方语言手册对null“类型”进行解读。题目:下面程序能正确运行吗?解析:输出应该为 :haha因为null 是可以强转为任何类类型的,所以前面((NULL)null)是合...
2024-01-10深入理解JVM虚拟机11:Java内存异常原理与实践
本文转自互联网,侵删本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客:www.how2playlife.com本文是微信公众号【Java技术江湖】的《深入理解JVM虚拟机》其中一篇,本文部分内...
2024-01-10Java中的装箱和拆箱深入理解
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。一.什么是装箱?什么是拆箱?在前面的文章中提到,Java为每种基本数据类型都提供了对应的包...
2024-01-10深入理解java虚拟机-第二章:java内存区域与内存泄露异常
java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的。2.2运行时的数据区域 vm会将管理的内存划分为不同的区域,不同的区域间有各自的用途,以及创建和销毁时...
2024-01-10深入理解JVM虚拟机字节码指令集
在Java虚拟机的指令集中,大多数指令都包含其操作所对应的数据类型信息,如:i代表对int类型的数据操作,l代表long,s代表short,b代表byte,c代表char,f代表float,d代表double,a代表reference。解释器的执行模型Java虚拟机的解释器的执行模型:do { 自动计算PC寄存器的值加1; 根据PC寄存器指示的位...
2024-01-10深入了解Java GC的工作原理
JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,另外JVM分别对新生代下载地址 和旧生代采用不同的垃圾回收机制。首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。JVM学习笔记 JVM内存管理和JVM垃...
2024-01-10深入理解Java定时调度(Timer)机制
简介在实现定时调度功能的时候,我们往往会借助于第三方类库来完成,比如: quartz 、 Spring Schedule 等等。JDK从1.3版本开始,就提供了基于 Timer 的定时调度功能。在 Timer 中,任务的执行是串行的。这种特性在保证了线程安全的情况下,往往带来了一些严重的副作用,比如任务间相互影响、任务执行...
2024-01-10理解JavaNIO
基础概念缓冲区操作 缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读)。如下图 内核空间、用户空间 上图简单描述了数据从磁盘到用户进程的内存区域移动的过程,其间涉及到了内核空间与用户...
2024-01-10深入理解Java IO的flush
Java的IO是一个大知识点,如果把它的知识点拆开来说的话估计能说一个星期,关于IO的体系可以看看下面这张图,接下来我们从一段代码开始聊吧,先看看下面这段代码public class Test { public static void main(String[] args) throws Exception { File file = new File("text.txt"); if(!file.exists()) { file.createNewFile(); } Fil...
2024-01-10理解Java赋值和参数传递机制
提纲:1、版权声明2、前言3、正文4、结论5、附注6、参考资料=======================================================1、版权声明: 本文作者:little,原始出处:用"堆栈区数据复制"理解Java赋值和参数传递机制的心得 (http://java.learndiary.com/disDiaryContentAction.do?goalID=2716),邮件:mdx-xx@tom.com。如有任何反馈意见请联系...
2024-01-10类的加载过程(深入理解jvm)
1.1.通过类的全限定名找到二进制字节流1.2.将字节流中的静态存储结构转化为方法区中的动态存储结构1.3.在内存中生成一个java.lang.Class对象作为方法区这个类各种数据的访问入口2.验证:校验字节码文件是否符合规则,是否会破会虚拟机的安全性2.1.文件格式验证(是否符合class格式要求,可以被虚拟...
2024-01-10