
深入理解Java虚拟机体系结构
1概述众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么。正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障。1.1Java程序执行流程Java程序的执行依赖于编译环境和运...
2024-01-10
【jvm】深入理解java虚拟机读书笔记
1.内存分配和回收策略:java技术体系中提倡自动内存管理核心解决两个问题:给对象分配内存 回收分配给对象内存, 对象优先在新生代(Eden)分配 2.垃圾回收器分为:Serial收集器,ParNew收集器,Parallel Scavenge收集器,Serial Old收集器, Parallel Old收集器,CMS...
2024-01-10
深入理解java线程通信
前言开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。可以通过以下几种方式实现:等待通知机制等待通知模式是 Java 中比较经典的线程通信方式。两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来...
2024-01-10
java虚拟机深入学习之内存管理机制
前言前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的。先让我们来看张图有些文章中对线程隔离区还称之为线程独占区,其实是一个意思了。下面让我们来详细介绍下这五部分;运行时数据区Java虚拟机在执行Java...
2024-01-10
java虚拟机原理:类加载过程详解
目录一、Java 类加载过程1、字节码编译2、加载3、连接4、初始化总结一、Java 类加载过程1、字节码编译编写好 Java 源码 Student.java ,使用 javac 将上述 Java 源码编译成 Class 字节码文件 Student.class ,2、加载加载 : 通过 " 类加载子系统 " 将该字节码文件 , 加载到 Java 虚拟机内存中 的 方法区 , 然后开始执...
2024-01-10
深入理解 Java 虚拟机之学习笔记(2)
本节介绍 Java堆的OutOfMemoryError测试Eclipse Memory Analyzer分析内存溢出 虚拟机栈和本地方法栈StackOverflowError测试方法区和运行时常量池溢出本机直接内存溢出一、Java堆的OutOfMemoryError测试 (1)首先设置debug configuration。如下图所示: (2)接下来进行编码操作,如下面的代码所示,不断添加...
2024-01-10
深入理解Java中的SPI机制
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编...
2024-01-10
转载 深入理解java类加载器
每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机...
2024-01-10
Java容器类的深入理解
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap。Collection├List 接口│├LinkedList ...
2024-01-10
深入理解Java中的IO
深入理解Java中的IO引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java > 本文的目录视图如下: Java IO概要 a.Java IO中常用的类 b.Java流类的类结构图1.流的概念和作用2.Java IO所采用的模型 :3.IO流的分类4.Java IO流对象 ...
2024-01-10
深入Java虚拟机(四)连接模型
从程序猿的角度来看,理解Java体系结构最重要的方面之一就是连接模型。前面曾说过,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
深入理解JVM虚拟机11:Java内存异常原理与实践
本文转自互联网,侵删本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客:www.how2playlife.com本文是微信公众号【Java技术江湖】的《深入理解JVM虚拟机》其中一篇,本文部分内...
2024-01-10
深入理解Java中的装箱和拆箱
前言自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。若有不正之处,请谅解和批评指正,不胜感激。一.什么是装箱?什么是拆箱?在前面的...
2024-01-10
深入理解Java虚拟机(第3版)读书笔记——类文件结构
第6章 类文件结构Java虚拟机不与包括Java语言在内的任何程序语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集、符号表以及若干其他辅助信息。Class类文件的结构任何一个Class文件都对应着唯一的一个类或接口的定义信息,但是反过来说,类或接口并不一...
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垃圾回收机制以及内存泄漏
前言在segmentfault上看到一个问题:java有完善的GC机制,那么在java中是否会出现内存泄漏的问题,以及能否给出一个内存泄漏的案例。本问题视图给出此问题的完整答案。垃圾回收机制简介在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据。如果只是不停的分配内存,那么...
2024-01-10
深入了解Java对象的克隆
今天要介绍一个概念,对象的克隆。本篇有一定难度,请先做好心理准备。看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充。 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢?什么时候需要使用呢?先来看一个小栗子: 简单起见,我们...
2024-01-10
理解JavaNIO
基础概念缓冲区操作 缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读)。如下图 内核空间、用户空间 上图简单描述了数据从磁盘到用户进程的内存区域移动的过程,其间涉及到了内核空间与用户...
2024-01-10
理解Java虚拟机——Java内存模型管理
运行时数据区域程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这...
2024-01-10
深入理解Java类加载机制,再也不用死记硬背了
深入理解Java类加载机制,再也不用死记硬背了 谈谈“会”的三个层次在《说透分布式事务》中,我举例里说明了会与会的差别。对一门语言的学习,这里谈谈我理解的“会”的三个层次:第一层:了解这门语言的语法、写法,我把它叫做 hello world 级别;第二层:了解这门语言的优劣势...
2024-01-10
深入理解ajax系列第一篇之XHR对象
前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的javascript和XML,这一技术能够向服务器请求额外的数据而无须卸载页面,会带来更好的用户体验。虽然名字中包含XML,但ajax通信与数据格式无关。下面将详细介绍ajax的内容 创建 ajax技术的核心是XMLHttpRequest对象(简称XHR),这是...
2024-01-10
简单了解java等待唤醒机制原理及使用
这篇文章主要介绍了简单了解java等待唤醒机制原理及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下这是一篇走心的填坑笔记,自学Java的几年总是在不断学习新的技术,一路走来发现自己踩坑无数,而填上的坑却屈指可数。突然发现,...
2024-01-10
