这是我见过最全的JVM内存区域讲解笔记,基本覆盖Java面试所问

JVM高频面试基本问题与知识点整理 阅读详情

本文转载自:这是我见过最全的JVM内存区域讲解笔记,基本覆盖Java面试所问


一、概述

Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。它们各有用途,有些随着虚拟机进程的启动一直存在(堆、方法区),有些则随着用户线程的启动和结束而建立和销毁(程序计数器、虚拟机栈、本地方法栈)。

《Java 虚拟机规范》中规定 Java 虚拟机管理的内存包括以下几个区域:

下面简要分析各个区域的特点。

二、JVM 运行时内存区域

2.1 程序计数器

程序计数器(Program Counter Register),可以看做当前线程所执行的字节码的行号指示器(其实就是记录代码执行到了哪里)。特点如下:

  • 线程私有;
  • 占用内存空间较小;
  • 若线程执行的是 Java 方法,记录的是虚拟机字节码指令地址;若执行的是本地(Native)方法,则为空(Undefined);
  • 该区域是唯一一个在《Java 虚拟机规范》中规定无任何 OutOfMemoryError 的区域。

主要作用:记录线程执行到了哪里。

2.2 Java 虚拟机栈

Java 虚拟机栈(Java Virtual Machine Stacks):Java 方法执行的线程内存模型。

每个方法被执行时,虚拟机栈都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每个方法从被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。其中局部变量表包括:

  • Java 虚拟机基本数据类型(8 种)
  • 对象引用(reference 类型,可能是一个指向对象起始地址的指针)
  • returnAddress

这些数据类型在局部变量表中的存储空间以局部变量槽(Slot)表示,其中 long 和 double 占用两个槽,其他类型占用一个槽。局部变量表所需内存空间在编译期完成分配,当进入一个方法时,该方法需要在栈帧中分配多大的局部变量空间是完全确定的,运行期间不会改变其大小。

虚拟机栈的特点:

  • 线程私有;
  • 生命周期与线程相同;
  • 两类异常
    • 线程请求的栈深度大于虚拟机所允许的深度时抛出 StackOverflowError 异常;
    • 栈扩展时无法申请到足够的内存时抛出 OutOfMemoryError 异常。

主要目的:Java 方法执行的线程内存模型。

2.3 本地方法栈

本地方法栈(Native Method Stacks)与 Java 虚拟机栈作用类似。二者区别:

  • Java 虚拟机栈为 JVM 执行 Java 方法(字节码)服务;
  • 本地方法栈为 JVM 使用到的本地(Native)方法服务。

异常与 Java 虚拟机栈相同。

主要目的:Native 方法执行的线程内存模型。

2.4 Java 堆

对多数应用来说,Java 堆(Java Heap)是 JVM 管理的内存中最大的一块。

唯一目的:存放对象实例(【几乎所有】的对象实例都在这里分配内存)。

《Java 虚拟机规范》描述:所有对象实例及数组都应在堆上分配。

而从实现角度看,由于即使编译技术(尤其是逃逸分析技术的日渐强大),"栈上分配"等手段使得对象并非完全在堆上分配。

特点:

  • 线程共享
  • 虚拟机启动时创建

PS: “新生代”、“老年代”、"Eden 区"等一系列对堆的区域划分,只是部分垃圾收集器的一些共性或设计风格,而非虚拟机的固有内存布局,更非《Java 虚拟机规范》的划分。

将 Java 堆细分的目的只是为了更好地回收内存,或者更快地分配内存。

2.5 方法区

方法区(Method Area):用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据,该区域也是线程共享的。又称"非堆"。

与方法区联系密切的一个概念是"永久代",下面简要介绍。

永久代

“永久代(Permanent Generation)”,可以理解为 JDK 1.8 之前 HotSpot 虚拟机对《Java 虚拟机规范》中"方法区"的实现。从 JDK 1.6、1.7 到 1.8+,HotSpot 虚拟机的运行时数据区变迁示意图如下:

HotSpot VM JDK 1.6 的运行时数据区示意图如下:

JDK 1.7 中,将 1.6 中永久代的字符串常量池和静态变量等移到了堆中,如下(虚线框表示已移除):

从上面几张图可以看出永久代和元空间的主要区别有以下两点:

①. 存储位置不同

  • 永久代是 JVM 内存的一部分,元空间在本地内存中(JVM 内存之外);
  • 永久代使用不当可能导致 OOM,元空间一般不会。

②. 存储内容不同:元空间存储的是「类型信息」(即类的元信息),而永久代除了类型信息,还包括「字符串常量池」和「静态变量」等(可以理解为元空间是永久代拆分出来的一部分)。

那么问题来了:为什么要把永久代替换为元空间呢?

原因大概有以下几点:

  • Oracle 收购了两种 JVM:HotSpot VM 和 JRockit VM,并且想要将它们整合,但二者方法区实现差异较大;
  • 字符串存在永久代中,容易出现性能问题和 OOM;
  • 类及方法的信息大小较难确定,永久代大小难以确定:太小易导致永久代溢出,太大则易导致老年代溢出(JVM 内存是有限的,此消彼长);
  • 永久代会为垃圾回收带来不必要的复杂度,且回收效率较低("性价比"低)。

2.6 运行时常量池

运行时常量池(Runtime Constant Pool)是方法区的一部分。

Class 文件中除了有类的版本、字段、方法、接口等描述外信息,还有一项信息是常量池表(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

相比于 Class 文件常量池的一个重要特性是「动态性」,运行期间也可以将新的常量放入池中(例如 String 类的 intern() 方法)。

可能产生的异常:OutOfMemoryError。

2.7 直接内存

直接内存(Direct Memory)并非虚拟机运行时数据区的一部分,也非《Java 虚拟机规范》定义的内存区域。但该部分内存被频繁使用(例如 NIO),而且可能导致 OutOfMemoryError。

三、OOM异常实践

3.0 操作系统及 JDK 版本

  • 操作系统:macOS Mojave 10.14.5

  • JDK 1.8

$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
  • JDK 1.7
$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

3.1 Java 堆溢出

  • 示例代码(JDK 1.8)
public class HeapOOM {
  public static void main(String[] args) {
    List<Object> list = new ArrayList<>();
    while (true) {
      list.add(new OOMObject());
    }
  }

  static class OOMObject {
  }
}

VM 参数

# 设置堆空间大小为 20M
-Xms20m -Xmx20m
-XX:+HeapDumpOnOutOfMemoryError

异常信息

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid39807.hprof ...
Heap dump file created [27773554 bytes in 0.342 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.util.Arrays.copyOf(Arrays.java:3210)
  ...

3.2 虚拟机栈和本地方法栈溢出

  • 示例代码(JDK 1.8)
public class StackOverflowError {
  private int stackLength = 1;

  private void stackLeak() {
    stackLength++;
    stackLeak();
  }

  public static void main(String[] args) {
    JvmStackOverflow sof = new JvmStackOverflow();
    try {
      sof.stackLeak();
    } catch (Throwable ex) {
      // 注意这里是 Throwable,而非 Exception (Error 不是 Exception)
      System.out.println("stack length: " + sof.stackLength);
      throw ex;
    }
  }
}
  • VM 参数

由于 HotSpot 虚拟机不区分 Java 虚拟机栈和本地方法栈。因此 -Xoss 参数(设置本地方法栈大小)并没有作用,栈空间只能由 -Xss 参数。

# Java 虚拟机栈大小
-Xss160K
  • 异常信息
stack length: 772
Exception in thread "main" java.lang.StackOverflowError
  at com.jaxer.example.JvmStackOverflow.stackLeak(JvmStackOverflow.java:11)
  at com.jaxer.example.JvmStackOverflow.stackLeak(JvmStackOverflow.java:12)
  ...

3.3 方法区和运行时常量池溢出

3.3.1 字符串常量

  • 示例代码
public class RuntimeConstantPoolOOM {
  static String baseStr = "string";

  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    while (true) {
      String s = baseStr + baseStr;
      baseStr = s;
      list.add(s.intern());
    }
  }
}

JDK 1.8 参数及异常:

  • VM 参数
# 最大堆空间为 10M,永久代为 10M (为便于观察,打印了启动命令和 GC 信息)
-Xmx10m -XX:PermSize=10m -XX:MaxPermSize=10m 
-XX:+PrintGCDetails -XX:+PrintCommandLineFlags
  • 异常信息
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=10m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=10m; support was removed in 8.0
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.util.Arrays.copyOf(Arrays.java:3332)
  ...

JDK 1.7 参数及异常信息:

  • VM 参数
# 设置永久代大小为 10M
-XX:PermSize=10m -XX:MaxPermSize=10m
  • 异常信息
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.util.Arrays.copyOf(Arrays.java:2367)
  ...

3.3.2 类型信息

  • 示例代码
package com.jaxer.example.cglib;

public class OOMObject {
}

使用 CGLib 生成代码:

public class PermGenOOM {
    public static void main(String[] args) {
        try {
            while (true) {
                Enhancer enhancer = new Enhancer();
                enhancer.setSuperclass(OOMObject.class);
                enhancer.setUseCache(false);
                enhancer.setCallback(new MethodInterceptor() {
                    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                        return methodProxy.invoke(o, objects);
                    }
                });
                enhancer.create();
            }
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

JDK 1.8 参数及异常:

  • VM 参数
# 设置元空间大小为 10M
-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m
  • 异常信息
java.lang.OutOfMemoryError: Metaspace
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:348)
  ...

JDK 1.7 参数及异常信息:

  • VM 参数
# 设置永久代大小为 10M
-XX:PermSize=10m -XX:MaxPermSize=10m -XX:+PrintGCDetails
  • 异常信息
Exception in thread "main" 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

此处的异常无法被捕获,Debug 模式断点如下:

可以看到,这里实际还是永久代(PermGen space)OOM 异常。

3.4 本机直接内存溢出

  • 示例代码(JDK 1.8)
public class DirectMemoryOOM {
  private static final int _1M = 2014 * 1024;

  public static void main(String[] args) {
        List<ByteBuffer> list = new ArrayList<>();
    while (true) {
      ByteBuffer buffer = ByteBuffer.allocateDirect(_1M); // java.lang.OutOfMemoryError: Direct buffer memory
//      ByteBuffer buffer = ByteBuffer.allocate(_1M); // java.lang.OutOfMemoryError: Java heap space
      list.add(buffer);
    }
  }
}
  • VM 参数
# 设置堆内存最大为 20M,直接内存最大为 10M
-Xmx20m -XX:MaxDirectMemorySize=10m
  • 异常
java.lang.OutOfMemoryError: Direct buffer memory

四、小结

本文主要分析了《Java 虚拟机规范》中规定的 Java 虚拟机管理的运行时内存区域,并以 HotSpot 虚拟机为例,分析了 JDK 1.7 和 1.8 内存溢出的情况。主要内容总结如下图:

PS: 一些虚拟机参数

# 设置堆空间大小
-Xms20m -Xmx20m

# 设置虚拟机栈空间大小
-Xss160K

# 设置永久代大小
-XX:PermSize=10m -XX:MaxPermSize=10m

# 设置元空间大小
-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m

# 打印 GC 日志
-XX:+PrintGCDetails

# 打印命令行参数
-XX:+PrintCommandLineFlags

# 堆栈信息
-XX:+HeapDumpOnOutOfMemoryError

本文转载自:这是我见过最全的JVM内存区域讲解笔记,基本覆盖Java面试所问

大厂面试突击——JVM篇 文末福利 阅读详情

相关推荐

全面覆盖:Java、JVM优化与Spring框架面试指南

简介:本文档全面介绍面试中常见的Java、JVM优化和Spring框架问题,为不同水平的IT专业人士(初级、中级、高级)提供了一份详尽的面试资料。内容涉及Java的基础知识、JVM调优的实用技巧以及Spring框架的高级应用。通过学习本指南,读者能够更好地掌握面试中可能遇到的问题,并且提高面试成功率。

weixin_42629522的博客 994

常用JVM命令参数

(1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高 (3)-verbose:gc 表示输出虚拟机中GC的详细情况 (4)-Xss128k 表示可以设置虚拟

dezhonger的专栏 591

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6963

JVM 方法调用的实现(重载/覆盖)

JVM 方法调用 运行 覆盖 重载

怀素的专栏 1794

AD936x Evaluation Software 详细配置

作者:ShownSun 工作室:时沿科技 文章目录AD936x Evaluation Software详细配置1 系统概述2 AD9361 Wireless Transceiver Evaluation Setup2.1 标签描述2.2 用户参数2.3详细配置3 AD936x RF Wizard3.1 标签描述3.2 用户参数3.3 详细配置4 AD936x Digital Filter Wizard4.1 标签描述4.1.1 时钟配置4.1.2 滤波器配置4.1.3 接收滤波器配置4.1.4 发射滤..

ShownSun博客 5195

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

jvm 参数包含远程调试,测试覆盖率收集

jvm 参数包含远程调试,测试覆盖率收集

ht99582的专栏 564

29、机器人动力学中的欧拉 - 拉格朗日与哈密顿力学

本文深入探讨了机器人动力学中的欧拉-拉格朗日与哈密顿力学框架,涵盖向量流形上的辛结构、哈密顿方程的几何代数表述、泊松括号与积分不变量等核心概念。文章详细推导了机电系统中拉格朗日量与哈密顿量的构建方法,并结合牛顿-欧拉算法给出了局部哈密顿量和动量导数的迭代计算流程,适用于多关节机器人的动力学建模与控制设计。通过应用案例展示了理论在双关节机器人手臂中的实际运用,最后展望了其在优化控制、鲁棒性提升及智能融合方向的潜力。

perl8的博客 129

JDK各个版本的区别

jdk1.5的新特性:1. 泛型   ArrayList list=new ArrayList()------>ArrayListlist=new ArrayList();2 自动装箱/拆箱   nt i=list.get(0).parseInt();-------->int i=list.get(0);原始类型与对应的包装类不用显式转换3 for-each   i=0;ifor(int i:a)

papima的博客 6万+

全志T527-TP9930-Camera

TP9930 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 BT656/BT1120 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3235

使用 Simulink + Simscape Electrical 搭建一个三相PWM整流器模型

本文详细介绍了使用Simulink搭建三相PWM整流器模型的方法,重点讲解了SVPWM调制策略的实现过程。内容包括系统结构设计、主电路搭建、SVPWM算法实现、双闭环控制器设计以及仿真分析。通过MATLAB Function Block实现SVPWM核心算法,并给出优化建议,如死区补偿、开关频率优化等。该教程为电力电子领域工程师提供了实用的建模与仿真方法,可用于新能源并网、电机驱动等应用场景的研发与优化。

amy_mhd的博客 196

获取JVM堆内存转储的常用方法

文章目录1. 堆内存转储简介2. 使用JDK内置工具2.1 `jmap` 工具2.2 `jcmd` 工具2.3 JVisualVM 工具3. 自动执行堆内存转储4. JMX方式4.1. JMX客户端工具4.2. 编程方式调用5. 小结 1. 堆内存转储简介 堆内存转储(Heap Dump),是指JVM堆内存在某一个时刻的快照,一般使用 hprof 格式的二进制文件来保存。 可用于分析内存泄漏问题,以及Java程序的内存使用优化。 常见的内存转储分析工具包括: jhat, JVisualVM, 以及基于Ecl

铁锚的优快云博客 1万+

液态神经网络(Liquid Neural Networks)从线虫大脑到下一代 AI

液态神经网络(Liquid Neural Networks,LNN)是一类具有动态内部结构的神经网络,其灵感来源于生物神经系统,尤其是大脑中神经元如何以复杂、非线性的方式响应外部刺激。与传统神经网络不同,液态神经网络的每个神经元在处理输入时,不再是静态线性或非线性变换,而是基于一个微分方程模型进行响应。这种建模方式使神经元的行为具有时间连续性和动态适应性。换句话说,它不仅“记住”过去的信息,还能根据当前环境实时调整自身的动态特性,这对于感知、决策、预测等任务都非常关键。

hello.reader 7409

Java虚拟机(JVM)面试题(2020最新版)

文章目录Java内存区域说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题对象的访问定位句柄访问直接指针内存溢出异常Java会存在内存泄漏吗?请简单描述垃圾收集器简述Java垃圾回收机制GC是什么?为什么要GC垃圾回收的优点和原理。并考虑2种回收机制垃圾...

ThinkWon的博客 32万+

基于锁相环的高精度频率分频器simulink建模与仿真

在现代电子系统中,高精度频率分频器扮演着至关重要的角色。它能够提供精确的频率参考,广泛应用于通信、仪器仪表、航空航天等领域。基于锁相环的高精度频率分频器具有结构简单、性能稳定等优点,成为了研究的热点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 776

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

手撸架构,JVM 面试30问

系统学习《深入了解JVM》https://blog.youkuaiyun.com/wuzhiwei549/category_9275772.html?spm=1001.2014.3001.5482 JDK、JRE、JVM的关系是什么? 什么是JvM? 英文名称( Java Virtual machine),就是JAA虚拟机,它只识别.cass类型文件,它能够将cass文件中的字节码指令进行识别并调用操作系统向上的A完成动作。 什么是JRE? 英文名称( Java runtime environment),Ja

vincent 9266

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《不看后悔》超赞!来一份常见 JVM 面试题+“答案”!

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。年底了,xjjdog决定来一篇实用的硬核文章。本篇文章多达38道面试题,照顾到...

小姐姐味道 2019

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

吊打面试官!JVM虚拟机灵魂77问,你能答对多少?,2024年最新大厂面试流程

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了。46、Parallel Scavenge 收集器(多线程复制算法、高效)48、Parallel Old 收集器(多线程标记整理算法)47、Serial Old 收集器(单线程标记整理算法 )44、Serial 垃圾收集器(单线程、复制算法)

2401_84437170的博客 891

真可笑!很多Java面试者为了“面试可以造核弹”才去学习JVM

"Write Once , Run Anywhere"。我相信每位Java人对这句话都不陌生,“一次编写,到处运行”,我们说这句话的底气就来自于JVM(JavaVirtualMachine)。你可能花过很多精力学习 JVM 的知识,但在面对真实生产环境产生的问题,依旧会束手无策: 不论是在问题现场还是跳槽面试,面对这些问题,如何快速定位和解决问题,需要你对 Java 虚拟机的实现和优化,有极为深刻的理解。但遗憾的是,很多时候我们都在为了“面试可以造核弹”才去学习 JVM。或者看一些理论书籍和...

bieber007的博客 2031

面试BAT时,他们问了我这些!

能进入BAT 等一线大厂工作,是很多开发者们的目标与梦想,为帮助开发者们提升面试技能、高效通关一线互联网公司的面试,提炼总结了这份面试真题,一次整体放出送给大家。 看看自己能答对多少 本篇建议大家收藏、备用~ 【BAT 等一线互联网面试真题集锦】 涵盖:开源、Java集合、JVM、NIO、Dubbo、秒杀系统、高并发、分布式、锁、redis、MySQL、Linux、hashMap、中间件等...

JavaEdge全是干货的技术号 6861

【面试题-4】JVM

【面试题-4】JVM

小何的博客 2684

这可能是2025最全的Java面试八股文

很多时候,面试官问的问题会和自己准备的“题库”中的问题不太一样,即使做了复盘,下次面试还是不知道该从何处下手。、Java、JVM、spring、算法、、分布式、大厂面经、技术脑图等等...共1600+页 质量非常高!!!不管最近要不要去面试,建议大家都保存一份!!学完之后不论是 厂内晋升 还是 跳槽涨薪 都不在话下!等等。

m0_46995061的博客 699

大厂面试官必问的那些JVM问题。到底应该怎么回答

这是传说中程序员的一天:8:00 闹铃第N遍响起,木然起床;9:00 地铁里各种气味交织,拼命把手机端到脸前;10:00 嚼着公司楼下的煎饼,开始敲敲敲敲敲代码12:00...

weixin_43167418的博客 1282

JVM面试速补:知识点梳理+学习路线+学习笔记+真题解析,够不够(1)

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,

2401_84689725的博客 1798
上一篇: 2020BAT最新Java面试题分享,网友们纷纷点赞
下一篇: 这可能是把Java 垃圾回收机制讲解的最清楚的一篇文章
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值