★ 深入理解 Java 虚拟机
《深入理解Java虚拟机》学习笔记
✦昨夜星辰✦
生活就像仰卧起坐,时而卷起,时而躺平。
展开
-
JVM 的运行原理代码实战
通过这个案例来了解下代码和对象是如何分配内存的,Java 代码又是如何在 JVM 中运行的。原创 2019-07-16 08:16:58 · 392 阅读 · 0 评论 -
Java 运行时数据区域
Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间原创 2019-07-17 08:01:18 · 684 阅读 · 0 评论 -
Java 对象的创建、内存布局和访问定位
Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样的一个过程呢?原创 2019-07-18 23:26:40 · 830 阅读 · 1 评论 -
实战:OutOfMemoryError 异常
本节内容的目的有两个,第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。原创 2019-07-22 23:48:36 · 336 阅读 · 0 评论 -
对象存活、垃圾收集算法
经过半个多世纪的发展,目前内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。原创 2019-07-31 07:11:21 · 758 阅读 · 0 评论 -
内存分配与回收策略
Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于这一点,上一篇已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在来探讨一下给对象分配内存的那点事儿。原创 2019-08-04 23:50:27 · 437 阅读 · 0 评论 -
垃圾收集器详解
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。原创 2019-08-15 12:52:07 · 555 阅读 · 0 评论 -
虚拟机性能监控与故障处理工具
给一个系统定位问题的时候,知识经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度,但学习工具前,也应当意识到工具永远都是知识技能的一层包装,不可能学会了就能包治百病。原创 2019-08-06 08:01:47 · 469 阅读 · 0 评论 -
调优案例分析与实战
高性能硬件上的程序部署策略、集群间同步导致的内存溢出、堆外内存导致的溢出错误、外部命令导致虚拟机缓慢、服务器 JVM 进程崩溃、不恰当数据结构导致内存占用过大原创 2019-08-06 18:55:07 · 1989 阅读 · 0 评论 -
深入理解 Java 虚拟机总结篇(一)
说说 JVM 的主要组成成分及其作用?什么是 JVM 内存结构?说一下堆栈的区别?谈谈 JVM 中的常量池?怎么判断对象是否可以被回收?原创 2019-08-14 23:01:03 · 840 阅读 · 0 评论 -
类加载机制(一):类加载的时机
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分统称为连接原创 2019-08-21 15:30:25 · 583 阅读 · 0 评论 -
类加载机制(二):类加载的过程
上一篇我们谈到类加载的时机,这一篇我们详细看看 Java 虚拟机中类加载的全过程,也就是加载、验证、准备、解析和初始化这 5 个阶段所执行的具体动作。原创 2019-08-21 17:23:15 · 745 阅读 · 0 评论 -
类加载机制(三):类加载器和双亲委派模型
上两篇文章我们分别讨论了类加载的时机和类加载的过程,本篇来讨论类加载器和双亲委派模型。虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”原创 2019-08-21 22:57:17 · 705 阅读 · 0 评论 -
虚拟机字节码执行引擎
执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。原创 2019-08-24 17:20:10 · 392 阅读 · 0 评论 -
volatile 关键字
volatile 关键字可以说是 Java 虚拟机提供的最轻量级的同步机制,但是他并不容易完全被正确、完整的理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用 synchronized 来进行同步。了解 volatile 变量的语义对后面了解多线程操作的其他特性很有意义原创 2019-09-01 18:31:11 · 700 阅读 · 0 评论 -
编译期优化
Java 语言的“编译期”其实是一段“不确定”的操作过程,因为他可能是指一个前端编译器把 Java 文件转变成 Class 文件的过程;也可能是指虚拟机的后端运行期编译器把字节码转变成机器码的过程;还可能是指使用静态提前编译器直接把 Java 文件编译成本地机器代码的过程。原创 2019-09-02 17:20:10 · 497 阅读 · 0 评论 -
运行期优化
为了提高热点代码的执行效率,在运行时,`虚拟机将会把这些代码编译成与本地平台相关的机器码`,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,简称 JIT 编译器)。原创 2019-09-02 17:20:40 · 377 阅读 · 0 评论 -
Java 内存模型与线程
在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与他的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘 IO、网络通信或者数据库访问上...原创 2019-09-02 23:20:54 · 481 阅读 · 0 评论 -
线程安全与锁优化
面向过程的编程思想极大地提升了现代软件开发的生产效率和软件可以达到的规模,但是现实世界与计算机世界之间不可避免地存在一些差异。例如,人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性可能会在中断期间被修改和变“脏”,而这些事件在计算机世界中则是很正常的事情。原创 2019-09-07 18:31:17 · 449 阅读 · 0 评论 -
深入理解 Java 虚拟机总结篇(二)
什么时候需要对类进行初始化?说一下类加载的过程说一下对象创建的过程什么是类加载器,常见的类加载器有哪些?原创 2019-09-07 23:20:47 · 290 阅读 · 0 评论