随笔分类 -  JVM

尚硅谷JVM
摘要:正常情况下,讲完执行引擎,就可以讲垃圾回收了。但是这里讲一下String,这在面试中经常遇到。 1、String的基本特性 String:字符串,使用一对 “” 引起来表示 String被声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持序列化的。实现了 阅读全文
posted @ 2021-03-09 15:58 峡谷挨打记 阅读(121) 评论(0) 推荐(0)
摘要:1、执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构 阅读全文
posted @ 2021-03-08 20:11 峡谷挨打记 阅读(100) 评论(0) 推荐(0)
摘要:这一章知识非常少,我们为什么要讲直接内存呢?是因为在jdk8的时候引入了元空间,而元空间使用的就是直接内存。 直接内存概述 直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 直接内存是在Java堆外的、直接向系统申请的内存区间。 来源于NIO(其实在jdk1.4 阅读全文
posted @ 2021-03-08 17:11 峡谷挨打记 阅读(326) 评论(0) 推荐(0)
摘要:上面我们已经讲完了运行时数据区。但道理可以直接讲执行引擎了,但是呢?为了面试(功利上讲),我们再讲下这一节。 从知识体系上讲。我们在写程序时要直面栈、堆、方法区。如果是创建对象,创建的对象是在堆中,对应的Class文件是在方法区中,如果是方法中的局部变量,则该变量是在栈中。那么这三者具体是什么关系呢 阅读全文
posted @ 2021-03-08 16:39 峡谷挨打记 阅读(91) 评论(0) 推荐(0)
摘要:1、栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 堆和元空间:会有OOM和GC 虚拟机栈和本地方法栈会有SOF 程序计数器不会有异常,也不会有GC。 下图设计到了对象的访问定位 Perso 阅读全文
posted @ 2021-03-04 16:48 峡谷挨打记 阅读(366) 评论(0) 推荐(0)
摘要:1、堆的核心概述 这里的堆和方法区都是用红色显示,一方面是说明其重要,另一方面呢?一个Java程序运行,对应着一个进程,也就对应着一个JVM实例(Runtime实例,这个类也是用管道单例模式,饿汉式),对于一个JVM实例,方法区和堆是独一份的。一个进程里面有多个线程,这些线程共享堆空间。 一个JVM 阅读全文
posted @ 2021-03-02 19:02 峡谷挨打记 阅读(163) 评论(0) 推荐(0)
摘要:本地方法栈 Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用(这一句话一说,基本上本章就结束了)。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小(在内存溢出方面和虚拟机栈相同) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟 阅读全文
posted @ 2021-03-02 15:22 峡谷挨打记 阅读(58) 评论(0) 推荐(0)
摘要:我们前面讲过了运行时数据区的PC寄存器和虚拟机栈。现在先跳出运行时数据区,讲一下本地方法接口。 什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非 阅读全文
posted @ 2021-03-02 14:57 峡谷挨打记 阅读(66) 评论(0) 推荐(0)
摘要:1、虚拟机栈概述 虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的【如果设计成基于寄存器的,耦合度高,性能会有所提升,因为可以对具体的CPU架构进行优化,但是跨平台性大大降低】。 优点是跨平台,指令集小,编译器容易实现,缺点 阅读全文
posted @ 2021-03-01 17:47 峡谷挨打记 阅读(82) 评论(0) 推荐(0)
摘要:1、PC Register介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装在到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器 阅读全文
posted @ 2021-02-26 18:50 峡谷挨打记 阅读(420) 评论(0) 推荐(0)
摘要:从第三章到第十章、甚至是第十二章都是运行时数据区的内容。 1、概述 前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段。 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,此时执行引擎 阅读全文
posted @ 2021-02-26 18:30 峡谷挨打记 阅读(75) 评论(0) 推荐(0)
摘要:1. 内存结构概述 简图 详细图-英文版 详细图-中文版 注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有 如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 2. 类加载器与类的加载过程 类加载子系统 类加载器子系统负责从文件系统或者网络中加载Clas 阅读全文
posted @ 2021-02-25 20:02 峡谷挨打记 阅读(118) 评论(0) 推荐(0)
摘要:一、JVM与Java体系结构 1.1 前言 你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM GC问题,但却无从下手。 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了。 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而 阅读全文
posted @ 2021-02-25 19:36 峡谷挨打记 阅读(117) 评论(0) 推荐(0)