深入理解 Java 内存区域与内存溢出异常(程序员的防崩溃指南)

Java程序内存溢出解决方案详解 Java程序在运行过程中,可能会因内存资源耗尽而抛出异常。该错误常见于堆内存不足、元空间溢出或线程栈空间耗尽等场景,直接导致应用崩溃或性能急剧下降,严重影响系统稳定性。造成内存溢出的原因多样,包括内存泄漏、不合理的JVM参数配置、大对象频繁创建等。理解其成因与表现,是进行后续分析与调优的前提。本文将从JVM内存结构入手,逐步剖析内存溢出的根源,并结合调优工具与实践方法,提供系统性的解决方案。通过本章的学习,我们掌握了Java内存泄漏的常见类型、识别方法以及主流分析工具的使用。 阅读详情

“我的程序又双叒叕OOM了!!!” —— 每个Java开发者都经历过的午夜惊魂时刻

一、Java内存模型:程序员必知的"战场地形"

咱们程序员最怕啥?当然是线上服务突然挂掉啊!而Java内存模型就像战场的沙盘地图,摸不清地形绝对要吃大亏。先来看这张灵魂手绘示意图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.1 堆内存(Heap)—— 对象们的"集体宿舍"

  • 新生代:刚new出来的对象都住这里(伊甸园Eden+两个幸存者区Survivor)
  • 老年代:熬过15次GC的"老油条"专属区域(参数:-XX:MaxTenuringThreshold)
  • 元空间(MetaSpace):JDK8后的类信息存储地(再见了PermGen!)

1.2 栈内存(Stack)—— 方法调用的"临时工位"

每个线程都有自己独立的:

  • 虚拟机栈:方法调用时的栈帧存放处(StackOverflowError重灾区!)
  • 本地方法栈:为Native方法服务

1.3 程序计数器——线程的"任务进度条"

记录当前线程执行的位置(唯一不会OOM的区域)

1.4 方法区——类的"档案室"

存储类结构信息(JDK8后并入元空间)

二、OOM异常全家桶:看看你中过几枪?

2.1 堆内存溢出(java.lang.OutOfMemoryError: Java heap space)

经典案例:

List<byte[]> memoryHog = new ArrayList<>();
while(true) {
    memoryHog.add(new byte[1024 * 1024]); // 每秒吃掉1MB内存
}

解决方案三连:

  1. -Xmx调整最大堆内存(别超过物理内存的80%!)
  2. 使用内存分析工具(MAT、YourKit)查泄漏
  3. 优化数据结构(比如用基本类型数组替代包装类)

2.2 栈溢出(java.lang.StackOverflowError)

作死代码:

void infiniteRecursion() {
    infiniteRecursion(); // 无限套娃警告!
}

保命技巧:

  • 调整栈大小:-Xss256k(但别太小!)
  • 递归改循环(重要的事情说三遍)
  • 避免大方法局部变量(局部变量表会撑爆栈)

2.3 元空间溢出(java.lang.OutOfMemoryError: Metaspace)

常见场景:

  • 动态生成类过多(比如CGLib疯狂代理)
  • 反射滥用(MethodHandles满天飞)

急救包:

-XX:MaxMetaspaceSize=512m # 设置元空间上限
-XX:+UseCompressedClassPointers # 开启压缩(省内存神器)

2.4 直接内存溢出(OutOfMemoryError: Direct buffer memory)

踩坑现场:

ByteBuffer.allocateDirect(1024 * 1024 * 1024); // 疯狂申请堆外内存

避坑指南:

  • 限制最大直接内存:-XX:MaxDirectMemorySize
  • 记得手动释放(Cleaner不是摆设!)
  • 使用内存池技术(比如Netty的ByteBuf)

三、实战调试技巧:从OOM到Oh Yeah!

3.1 内存泄漏定位四部曲

  1. jps -l 查进程ID
  2. jmap -dump:format=b,file=heap.hprof <pid> 导出堆快照
  3. MAT分析支配树(Dominator Tree)
  4. 定位到"吸血鬼"对象(谁在持有不该有的引用?)

3.2 GC日志分析(带你看懂天书)

启动参数示例:

-XX:+PrintGCDetails -Xloggc:/path/to/gc.log

日志关键字段解析:

[GC (Allocation Failure) [PSYoungGen: 3145728K->1536K(3670016K)] 
3145728K->1544K(11796480K), 0.0012345 secs]

翻译:年轻代GC,回收前3G→回收后剩1.5M,耗时1.2ms

3.3 线上诊断利器:Arthas

几个救命命令:

  • dashboard:实时监控面板
  • heapdump:动态导出堆快照
  • trace:方法调用追踪(查慢速请求神器)

四、内存优化进阶:让JVM飞起来

4.1 对象分配策略优化

  • 逃逸分析:-XX:+DoEscapeAnalysis
  • 栈上分配:-XX:+EliminateAllocations
  • 大对象直接进老年代:-XX:PretenureSizeThreshold=1m

4.2 GC策略选择指南

GC算法适用场景启动参数
Parallel GC吞吐量优先-XX:+UseParallelGC
CMS低延迟(已废弃)-XX:+UseConcMarkSweepGC
G1平衡型(JDK9+默认)-XX:+UseG1GC
ZGC超大堆(TB级)低延迟-XX:+UseZGC

4.3 监控指标黄金三问

  1. GC频率是否正常?(Young GC >1次/秒要警惕)
  2. Full GC时间是否可控?(超过1秒就是危险信号)
  3. 内存使用率是否平稳?(锯齿状波动比直线更健康)

五、血的教训:那些年我们踩过的坑

案例1:静态Map引发的血案

public class CacheManager {
    public static Map<String, Object> CACHE = new HashMap<>(); // 静态大坑!
}

教训:静态集合必须设置容量上限或用WeakHashMap

案例2:线程池不当使用导致OOM

ExecutorService pool = Executors.newCachedThreadPool(); // 魔鬼方法!

正确姿势:

new ThreadPoolExecutor(// 明确指定参数
     corePoolSize, 
     maxPoolSize,
     keepAliveTime,
     TimeUnit.SECONDS,
     new ArrayBlockingQueue<>(1000));

六、未来趋势:GraalVM带来的变革

新一代虚拟机特性:

  • 原生镜像编译(native-image)
  • 多语言混编支持
  • 更精细的内存控制

但要注意:
native-image编译时会进行死代码消除,反射配置需谨慎!


最后灵魂拷问:
下次OOM时,你能在30分钟内定位问题吗?(赶紧收藏本文到浏览器书签吧!)

本文基于JDK17编写,部分参数在不同版本可能有所差异。实际生产环境请先进行压测验证。

智慧工地算法视频分析服务器区域入侵检测AI视频分析技术在煤矿的实战应用 通过实时分析和处理井下视频资料,智慧矿山算法视频分析服务器不仅能够及时发现并预警人员违规行为和设备异常状况,还能够通过智能分析预防潜在的安全风险,从而显著提高煤矿的安全管理水平和生产效率。 阅读详情

相关推荐

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 628

深入理解JAVA虚拟机-笔记-JAVA内存区域与内存溢出异常

Java虚拟机所管理的内存包括以下几个运行时数据区域 程序计数器(Program Counter Register):可以看作当前线程所执行的字节码的行号指示器,每条线程都有独立的程序计数器,各线程不影响。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都会依赖这个。 如果线程执行的是Native方法,这个计数器则为空...

qq_26533645的博客 241

MATLAB实战:手把手教你用三频四步相移法搞定结构光三维重建(附完整代码)

本文详细介绍了如何使用MATLAB实现三频四步相移法进行高精度结构光三维重建。通过光栅图像预处理、相位计算、多频外差与相位解包裹等步骤,结合完整代码示例,帮助读者掌握从二维图像到三维点云的关键技术。该方法在工业检测和逆向工程中具有抗干扰能力强、高分辨率和鲁棒性等优势。

weixin_29201933的博客 338

深入理解Java虚拟机(第二版)—— 第2章 Java内存区域与内存溢出异常(更新中......)

第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 第3章 垃圾收集器与内存分配策略 第4章 虚拟机性能监控与故障处理工具 第5章 调优案例分析与实战 2.1 概述 对于从事C、C++程序开发开发的开发人员来说,在内存领域,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。对Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。 内存泄漏: 内存泄漏(Memory Le

qq_37783118的博客 252

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 311

Material Studio中分子动力学模拟得到密度density和溶解度参数

使用sketh工具画出全原子分子,以异辛烷为例子。

handsome213的博客 7315

《深入理解 Java 虚拟机》学习笔记 Day6(OutOfMemoryError 异常实战:Java 堆溢出)

如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链,找到泄漏对象是通过怎样的引用路径、与哪些GC Roots相关联,才导致垃圾收集器无法回收它们,根据泄漏对象的类型信息以及它到GC Roots引用链的信息,一般可以比较准确地定位到这些对象创建的位置,进而找出产生内存泄漏的代码的具体位置。如果不是内存泄漏,换句话说就是内存中的对象确实都是必须存活的,那就应当检查Java虚拟机的堆参数(-Xmx与-Xms)设置,与机器的内存对比,看看是否还有向上调整的空间。展开可以发现,就是海量的。

nx__xn的博客 284

无人机飞控算法开发实战:从零到一构建企业级飞控系统

本文系统介绍了无人机飞控算法开发的完整流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以及企业级飞控系统架构设计。通过结合开源飞控框架(如PX4)和实际工程经验,提供了完整的代码实现示例,帮助学者从零开始掌握无人机飞控开发的核心技术。文中详细讲解了四旋翼无人机的动力学模型、传感器校准方法、EKF状态估计算法、PID和ADRC控制算法的实现,以及MAVLink通信协议的集成。最后,总结了完整的飞控系统开发流程和未来发展趋势。

全栈 3401

深入理解Java虚拟机:第一章

深入理解Java虚拟机读书笔记

七叔的博客 1万+

西电微机系统课程设计——步进电机开环控制系统设计

西电微机系统课程设计——步进电机开环控制系统设计 一、课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 3.搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50 米,CPU收到水位信号后,根据水位高度控制步进电机(水闸)进行调节。 三、系统功能与设计要求 基本功能要求 手

OutlierLi's Blog 7524

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 658

谈谈你对Java内存溢出的理解

Java内存溢出是开发过程中需要特别关注的一个问题,它不仅影响程序的稳定性和性能,还可能导致系统崩溃。通过深入理解内存溢出的原因、类型及解决方法,开发人员可以更有效地编写出健壯、高效的Java程序。在实际开发中,合理设置JVM参数、定期进行代码审查和重构、使用专业的内存分析工具,都是预防和解决内存溢出问题的重要手段。

weixin_44259230的博客 465

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

深入理解Java虚拟机系列(一):自动内存管理机制

目录 一、Java内存区域与内存溢出 1.内存分区 1)程序计数器 2)Java虚拟机栈 3)本地方法栈 4)堆区 5)方法区 6)常量池 7)直接内存 2.对象创建 1)对象在内存上的分布 2)对象的访问定位方式 3)对象创建 3.内存溢出 1)堆内存溢出和内存泄露 2)虚拟机栈及本地方法栈溢出 3)方法区和运行时常量池溢出 4)直接内存溢出 二、垃圾收集器...

执 687

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【读书笔记】深入理解Java虚拟机(周志明)(1)第一部分 走进Java(2)第二部分 自动内存管理机制

无重点学习Java虚拟机的重要原因:当出现内存泄漏时,知道怎么排查。学习垃圾收集(Garbage Collection, GC)的原因:可以帮助我们避免和解决OOM问题、由JVM引起的性能瓶颈等:调整Eden区和Survivor区的比值。默认为8:1:1。例如:我们经常要产生临时大对象时,可以将:直接晋级到老年代对象的大小。:设置CMS收集器GC时给用户留多少%的空间无重点无重点。

iioSnail的博客 1727

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

阿里P8写出的《深入理解Java虚拟机》最新版,轻松学会JVM底层

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虚拟机的资料却显得异常贫乏。随着Java技术的不断发展,它已被应用于越来越多的领域之中。

SharingOfficer的博客 475

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

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

阿里P8写出的《深入理解Java虚拟机3》轻松学会JVM底层

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。从计算机程序出现的第一天起, 对效率的追逐就是程序员天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。代码编译的结果从本地机器码转变为字节码,是存储格式发展的一-小步,却是编程语言发展的一大步。

m0_63437643的博客 877

浅谈 Jvm 内存区域

1、前述 在大学学习 C++ 的时候,有一个最烦人的操作,就是对内存的管理,全部交给了开发者自己管理,开发者在写代码的时候,经常需要写代码去释放内存,否则酒很容易造成内存泄露或者内存泄漏,导致服务崩溃,但是在 Java 语言里,Jvm 剥夺了开发者这个权力,由 java 虚拟机自己来管理,这样在一定程度上释放 java 语言开发者,不再需要为每一个 new 出来的对象做delete/free 的操...

TanXi的博客 365

Java最新《深入理解JVM,Java开发社招面试解答之性能优化

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。更多JVM面试整理:本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取码工作。

2401_84557547的博客 625

JVM | 第1部分:自动内存管理与性能调优《深入理解 Java 虚拟机》

第1部分主题为自动内存管理,以此延伸出 Java 内存区域与内存溢出、垃圾收集器与内存分配策略、参数配置与性能调优等相关内容;

多氯环己烷的博客 857

深入理解java虚拟机第二章笔记

第二章 java内存区域与内存溢出异常一 运行时数据区域1. 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。如果线程正在执行一个java方法,那这个计数器记录的是正在执行的虚拟机的字节码指令的地址(线程私有)。2. java虚拟机栈(线程私有):生命周期与线程相同。虚拟机栈描述的java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,...

llcream的博客 310

深入理解Java虚拟机

1 走近Java 7 1.1 概述 7 1.2 Java技术体系 7 1.3 Java发展史 7 2 Java内存区域与内存溢出异常 8 2.1 概述 8 2.2 运行时数据区域 8 2.2.1 程序计数器 8 2.2.2 Java虚拟机栈 8 2.2.3 本地方法栈 9 2.2.4 Java堆 9 2.2.5 方法区 9 2.2.6 运行时常量池 9 2.2.7 直接内存 9 2.3 对象访问 ...

Ymh_Sirius的博客 385

《深入理解Java虚拟机》读书笔记

为什么看这本书? JVM 这块一直没有系统的学习,在极客时间上买了一个 "深入拆解Java虚拟机" 专栏,专栏是看完了,但是感觉跟看天书一样,基本都忘了。所以希望借助看这本书入个门。 书的整体情况 整书 400 多页,包含了大量 JVM 配置参数与代码实例,我花了周末一天加三个晚上空余时间看完的,七八小时。读起来没那么累,但没去实践还是比较容易忘记。 书提到了这些知识模块: Java 与虚拟机的发展历史 如何编译 JDK Java内存区域 内存溢出异常 垃圾收集器与内存分配策略 虚.

ConstXiong 306

java程序员技术路线,java程序员面试笔试宝典pdf

在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时,引发性能问题。我们团队负责的广告系统承接了比较大的C端流量,平峰期间的请求量基本达到了上千QPS,过去也遇到了很多次GC相关的线上问题。这篇文章,我再分享一个更棘手的Young GC耗时过长的线上案例,同时会整理下YGC相关的知识点,希望让你有所收获。内容分成以下2个部分:概述+ Java技术体系+Jav

EDGNB123的博客 708
上一篇: 爬虫法律边界大揭秘!技术无罪≠操作合法(附2023最新案例)
下一篇: 当爬虫遇到403 Forbidden时,我总结的七个破局妙招(血泪经验分享)
普通网友
博客等级 码龄2年 153粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值