JVM中的程序计数寄存器(Program Counter Register)中, Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息
今天聊一聊为什么使用线程池比手动创建线程要好,具体好在哪里?
每一个类加载器,都拥有一个独立的类名称空间:比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意
Java全能学习面试指南:https://javaxiaobear.cn说说类加载分几步?需要什么来进行加载在Java中数据类型分为基本数据类引用数据类型则需要进行类的加载。
Class文件的结构并不是一成不变的,随着Java虚拟机的不断发展,总是不可避免地会对Class文件结构做出一些调整,但是其基
垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作
今天介绍了很多 Linux 命令,用于定位分析问题,所有的命令都是可以实际操作的,能够让你详细地把握整个 JVM 乃至操作系统的运行状
在JDK1.2之前,在自定义类加载时,总会去继承ClassLoader类并重写loadClass方法,从而实现自定义的类加载类。但是在JDK1.2之后已不再
今天聊一聊为什么使用线程池比手动创建线程要好,具体好在哪里? 为什么要使用线程池 首先,回顾线程池的相关知识,在 Java 诞生之初是没有线程池的概念的,而是先有线程,随着线程数的不断增加,人们发现需要一个专门的类来管理它们,于是才诞生了线程池。没有线程池的时候,每发布一个任务就需要创建一个新的线程,这样在任务少时是没有的,如代码所示。 /** * 描述: 单个任务的时候,新建线程来
Java全能学习+面试指南:://javaxiaobear.cn 今天我们主要学习线程是如何在 6 种状态之间转换的。 线程的 6 种状态 就像生物从出生到长大、最终死亡的过程一样,线程也有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态。 New(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed Waiting(计时
今天我们主要学习如何正确停止一个线程?以及为什么用 volatile 标记位的停止方法是错误的? 首先,我们来复习如何启动一个线程,想要启动线程需要调用 Thread 类的 start() 方法,并在 run() 方法中定义需要执行的任务。启动一个线程非常简单,但如果想要正确停止它就没那么容易了。 原理介绍 通常情况下,我
Java全能学习+面试指南:https://javaxiaobear.cn 今天我们来学习为什么说本质上只有一种实现线程的方式?实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里? 实现线程是并发编程中基础中的基础,因为我们必须要先实现多线程,才可以继续后续的一系列操作。所以本课时就先从并发编程的基础如何实现线程开始讲起,希望你能够夯实基础,虽然实现线程看似简单、基础,但实际
今天我们聊一聊Java锁的分类 锁的 7 大分类 需要首先指出的是,这些多种多样的分类,是评价一个事物的多种标准,比如评价一个城市,标准有人口多少、经济发达与否、城市面积大小等。而一个城市可能同时占据多个标准,以北京而言,人口多,经济发达,同时城市面积还很大。 同理,对于 Java 中的锁而言,一把锁也有可能同时占有多个标准,符合多种分类,比如 ReentrantLock 既是可中断锁,又是可重入
Java全能学习+面试指南:https://javaxiaobear.cn 今天我们主要自己模拟一个 JVM 内存溢出的场景。在模拟 JVM 内存溢出之前我们先来看下这样的几个问题。 老年代溢出为什么那么可怕? 元空间也有溢出?怎么优化? 如何配置栈大小?避免栈溢出? 进程突然死掉,没有留下任何信息时如何进行排查? 年轻代由于有老年代的担保,一般在内存占满的时候,并没什么问题。
Java全能学习面试指南:https://javaxiaobear.cn今天我们主要从一个实战案例入手分析面对突如其来的 GC 问题该如何下手解决。想要下手解决 GC 问题,我们首先需要掌握下面这三种问题。如何使用 jstat 命令查看 JVM 的 GC 情况?面对海量 GC 日志参数,如何快速抓住问题根源?你不得不掌握的日志分析工具。工欲善其事,必先利其器。我们前面课时讲到的优化手段,包括代码优
小熊学Java:https://www.javaxiaobear.cn/ 本文我们重点剖析 JVM 的垃圾回收机制。关于 JVM 垃圾回收机制面试中主要涉及这三个考题: JVM 中有哪些垃圾回收算法?它们各自有什么优劣? CMS 垃圾回收器是怎么工作的?有哪些阶段? 服务卡顿的元凶到底是谁? 虽然 Java 不用“手动管理”内存回收,代码写起来很顺畅。但是你有没有想过,这些内存是怎
Java全能学习+面试指南:https://www.javaxiaobear.cn/前面我们提到,类的初始化发生在类加载阶段,那对象都有哪些创建方式呢?除了我们常用的 new,还有下面这些方式:使用 Class 的 newInstance 方法。使用 Constructor 类的 newInstance 方法。反序列化。使用 Object 的 clone 方法。其中,后面两种方式没有调用到构造函数
test 函数同时使用了成员变量 a、静态变量 C,以及输入参数 num。我们此时说的函数执行,内存其实就
test 函数同时使用了成员变量 a、静态变量 C,以及输入参数 num。我们此时说的函数执行,内存其实就是在虚拟机
JVM 的运行时区域是栈,而存储区域是堆。很多变量,其实在编译期就已经固定了。.class 文件的字节码,由于助记
到这里内容就全部讲完了,今天我们分别从三个角度,了解了 JVM 在 Java 研发体系中的位置,并以一个简单的程序,看了下一个 Java 程序基本的执行过程。我们所说的 JVM,狭义上指的就 HotSpot。如非特殊说明,我们都以 HotSpot 为准。我们了解到,Java 之所以成为跨平台,就是由于 JVM 的存在。Java 的字
Java全能学习+面试指南:https://javaxiaobear.cn 今天我们主要自己模拟一个 JVM 内存溢出的场景。在模拟 JVM 内存溢出之前我们先来看下这样的几个问题。老年代溢出为什么那么可怕?元空间也有溢出?怎么优化?如何配置栈大小?避免栈溢出?进程突然死掉,没有留下任何信息时如何进行排查?年轻代由于有老年代的担保,一般在内存占满的时候,并没什么问题。但老年代满了就比较严重了,它没
或。
提醒一下,你可以算一下我们的 Survivor 区大小,大约是 182MB 左右,如果稍微有点流量偏移,或者流量突增,
为了减少这个开销,将内容放入 RSet 的过程是异步的,而且经过了很多的优化:Write Barrier 把脏卡信息存放到本地缓冲区
有的对象可能在 Eden 区,有的可能在老年代,那么这种跨代的引用是如何处理的呢?比如,如果幸存区中相同年龄对象大小的和,大于幸存区的一半,大于或等于
Java全能学习+面试指南:https://javaxiaobear.cn今天我们主要从一个实战案例入手分析面对突如其来的 GC 问题该如何下手解决。想要下手解决 GC 问题,我们首先需要掌握下面这三种问题。如何使用 jstat 命令查看 JVM 的 GC 情况?面对海量 GC 日志参数,如何快速抓住问题根源?你不得不掌握的日志分析工具。工欲善其事,必先利其器。我们前面课时讲到的优化手段,包括代码
Java全能学习+面试指南:https://javaxiaobear.cn 这篇主要讲解如何在大流量高并发场景下进行估算和调优。 我们知道,垃圾回收器一般使用默认参数,就可以比较好的运行。但如果用错了某些参数,那么后果可能会比较严重,我不只一次看到有同学想要验证某个刚刚学到的优化参数,结果引起了线上 GC 的严重问题。 所以你的应用程序如果目前已经满足了需求,那就不要再随便动这些参数了。另外,优化
Java全能学习+面试指南:https://javaxiaobear.cn 今天我们主要来看下这两个高频的面试考题: G1 的回收原理是什么?为什么 G1 比传统 GC 回收性能好? 为什么 G1 如此完美仍然会有 ZGC? 我们在上一篇中,简要的介绍了 CMS 垃圾回收器,下面我们简单回忆一下它的一个极端场景(而且是经常发生的场景)。 在发生 Minor GC 时,由于 Surviv
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号