随笔分类 -  Java 虚拟机

摘要:1.生存还是死亡? 在堆里存放着几乎所有的 Java 对象实例,在 GC 执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC 才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们称为垃圾标记阶段。 那么在 JVM 中究竟是如何标记 阅读全文
posted @ 2024-07-21 20:21 城北有个混子 阅读(148) 评论(0) 推荐(1) 编辑
摘要:1.前言 1.1 什么是垃圾? 在提到什么是垃圾之前,我们先看下面一张图: 从上图我们可以很明确的知道,Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++ 语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是 Java 语言的伴生产物,早在1960年,第一门开始使用内 阅读全文
posted @ 2024-07-17 10:25 城北有个混子 阅读(475) 评论(0) 推荐(2) 编辑
摘要:1.概述 执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器。 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行 阅读全文
posted @ 2024-07-02 16:32 城北有个混子 阅读(161) 评论(0) 推荐(0) 编辑
摘要:一、对象实例化 1.1 对象创建方式 ★ new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法。 ★ Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器。 ★ Constructor的newInstance 阅读全文
posted @ 2024-06-09 19:21 城北有个混子 阅读(296) 评论(0) 推荐(0) 编辑
摘要:1.前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? ✘ 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! ✘ 想解决线上JVM GC问题,但却无从下手。 ✘ 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了。 ✘ 每次面试之前都要重新背一遍JVM的一些 阅读全文
posted @ 2024-05-27 09:42 城北有个混子 阅读(363) 评论(2) 推荐(1) 编辑
摘要:1.前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑。 2.栈、堆、方法区的交互关系 下面就涉及了对象的访问定位: Person:存放在元空间,也可以说方法区; person:存放在Java栈 阅读全文
posted @ 2021-01-15 13:59 城北有个混子 阅读(4762) 评论(0) 推荐(5) 编辑
摘要:1.堆的核心概念 堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。它是 JVM 管理的最大一块内存空间 阅读全文
posted @ 2021-01-03 15:30 城北有个混子 阅读(668) 评论(0) 推荐(2) 编辑
摘要:1.本地方法栈 Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) ✎ 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个 StackOve 阅读全文
posted @ 2021-01-02 14:06 城北有个混子 阅读(291) 评论(0) 推荐(1) 编辑
摘要:1.本地方法接口 1.1 什么是本地方法? 简单地讲,一个 Native Method 就是一个Java调用非Java代码的接囗。一个 Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如 C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在 阅读全文
posted @ 2021-01-02 14:05 城北有个混子 阅读(226) 评论(0) 推荐(1) 编辑
摘要:1.虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 栈实现的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少Java开发人员一提到Java内存结构,就会非常粗略度地将JVM中的内 阅读全文
posted @ 2020-12-24 08:54 城北有个混子 阅读(798) 评论(0) 推荐(3) 编辑
摘要:1.简介 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行。 这里的寄存器,并非是广义上所指的物理寄存器,将其翻译为PC计数器(或指令计数器)更为贴切一些(也称 阅读全文
posted @ 2020-12-24 08:52 城北有个混子 阅读(928) 评论(0) 推荐(1) 编辑
摘要:1.运行时数据区概述 1.1 在JVM 中的位置 1.2 内部划分 当我们通过前面的:类的加载 → 验证 → 准备 → 解析 → 初始化 这几个阶段完成后,执行引擎就会对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区。 运行时数据区处在JVM 的内存区域。我们通过磁盘或者网络IO得到的数 阅读全文
posted @ 2020-12-24 08:51 城北有个混子 阅读(260) 评论(0) 推荐(1) 编辑
摘要:1.概述 1.1 类加载器子系统在Java JVM中的位置 1.2 类加载器子系统的具体实现 1.3 类加载器子系统的作用 ① 负责从文件系统或者网络中加载.class文件,Class 文件在文件开头有特定的文件标识。 ② ClassLoader只负责Class 文件的加载,至于它是否可以运行,则由 阅读全文
posted @ 2020-12-16 09:13 城北有个混子 阅读(808) 评论(2) 推荐(4) 编辑

点击右上角即可分享
微信分享提示