JVM 作为一个通用的 虚拟机 ,我们可以通过启动 java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内存管理和垃圾回收的 GC 算法,添加和处理调试和诊断信息等等。本节概括地讲讲 JVM 参数,对于 GC 相关的详细参数将在后续的 GC 章节说明和分析。直接通过命令行启动 Java 程序的格式为: java [option ......
354
0
0
2023-08-28
JVM 基础 程序计数器(Program Counter Register)CPU中的寄存器 作用: 记住下一条JVM指令 特点: 线程 私有唯一一个不会出现内存溢出的区域虚拟机 栈(Java virtual mechine Stack)线程私有 每个线程运行时所需要的内存每个栈由多个栈帧Frame组成,对应着每次方法调用时占的内存每个线程只能有 ......
256
0
0
2023-08-28
目录前言桥接方法什么时候会出现桥接方法?为什么需要桥接方法?总结前言之所以写这么一篇文章是因为在Spring中,经常会出现下面这种代码// 判断是否是桥接方法,如果是的话就返回这个方法 BridgeMethodResolver.findBridgedMethod(specificMethod); 这些代码对我之前也造成了不小疑惑,在彻底弄懂后通过本文分享 ......
280
0
0
2023-07-14
前言 作为 JAVA 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM 知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。 而大多数人可能没有对 JVM 的实际开发和使用经验, 接下来这一系列文章将带你深入了解 JVM 需要掌握的各个知识点。这也将帮助你完成从初级程序员到高级程序员的转变。目录 线程 (详解) ......
258
0
0
2023-06-23
(文章最后有彩蛋)1. Java 内存区域与内存溢出异常1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需 ......
251
0
0
2023-06-22
前言jvm 系列文章如无特殊说明,一些特性均是基于Hot Spot 虚拟机 和JDK1.8版本讲述。下面这张图我想对于每个学习 java 的人来说再熟悉不过了,这就是整个JDK的关系图: 从上图我们可以看到,Java Virtual Machine位于最底层,所有的Java应用都是基于JVM来运行的,所以学习JVM对任何一个想要深入了解Java的人是必不可少 ......
252
0
0
2023-06-17
JVM-内存溢出/泄露及相关工具what什么是内存溢出和 内存泄漏 呢? 内存溢出:内存空间不足导致; 内存泄漏:应该释放的对象没有释放。 拿一个生活中的事情来举例: 张三最近交了一个女朋友小红,女孩是他的初恋。张三全心全意地爱惜这个女孩,此时张三心里装不下其他人,这个有另外一个女孩想进入张三内心进不去,这个时候就是内存溢出(张三的心里装满了小红没有空间装下 ......
286
0
0
2023-06-15
JDK8内存区域Java 虚拟机 在执行 java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。如下图所示: Java 对象分配内存主要与堆有关,所以此处只介绍一下堆内存。堆是 JVM 内存管理的最大的一块区域,此内存区域的唯一目的就是存放对象的实例,所有对象实例与数组都要在堆上分配内存。它也是垃圾收集器的主要管理区域。java 堆可以处于 ......
269
0
0
2023-06-13
方法区(Method Area) 与 Java 堆一样,是各个 线程 共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《 java 虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区分开来。目录栈、堆、方法区的交互关系方法区的理解设置 ......
364
0
0
2023-06-13
nginx nginx.conf:Nginx核心配置文件,linux下默认安装在/etc/nginx/# Nginx所用用户和组,window下不指定 user www-data; # 工作的子进程数量(通常等于CPU数量或者倍于CPU) worker_processes auto; # pid存放文件 pid /run/nginx.pi ......
257
0
0
2023-06-12
目录1.Java 堆溢出1.1 设置JVM参数1.2 测试代码1.3 运行OOM日志2.Java栈、本地方法栈溢出2.1 设置JVM参数2.2 测试代码2.3 运行OOM日志2.4 Java虚拟机OOM异常3.Java 运行常量池溢出3.1 设置JVM参数-注意区分jdk版本3.2 测试代码3.3 运行OOM日志4.Java 方法区溢出-jdk84.1 设置 ......
291
0
0
2023-06-11
一: 虚拟机 内存图解Java 程序运行与虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。虚拟机管理内存数据区域划分如下图:数据区域分类:方法区: (Method Area)虚拟机栈 : (VM Stack)本地方法栈 : (Native Method Stack)堆: (Heap)程序计数器: ( ......
231
0
0
2023-06-03
原文链接:概述本文是JVM入门教程的第一篇。在这篇博客中,将介绍JVM的基本结构和相关的概念,并通过一个简单的示例,演示java程序的运行过程。JVM运行时数据区 如上图所示,java代码经过编译之后,产生了class文件。java程序运行时,JVM会为class文件分配一个内存空间,存储它运行时的信息,即JVM运行数据区。JVM运行数据区按照线程是否独占或 ......
270
0
0
2023-05-30
写在前面本节常见面试题:问题答案在文中都有提到如何判断对象是否死亡(两种方法)。 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收集有哪些算法,各自的特点? HotSpot 为什么要分为新生代和老年代? 常见的垃圾回收器有那些? 介绍一下CMS ......
271
0
0
2023-05-28
Java 代码到底是如何运行的呢?看下面的流程图理解 Java 代码是如何运行: Java 代码运行过程概括一下:程序员小张编写好的 Java 源代码文件经过 Java 编译器编译成字节码文件后,通过类加载器加载到内存中,才能被实例化,然后到 Java 虚拟机 中解释执行,最后通过操作系统操作 CPU 执行获取结果。具体的 javac 编译和类加载器过程请 ......
269
0
0
2023-05-26