java 关于内存溢出的相关知识

 

 

http://developer.51cto.com/art/200906/129346.htm

Java内存溢出的详细解决方案

 

本文介绍了java内存溢出的时候可以通过设置各种参数来解决的方案。

包括:java.lang.OutOfMemoryError: PermGen space

与:java.lang.OutOfMemoryError: Java heap space

并介绍了解决方案中各个参数的意义。如:-XX:PermSize  -Xmx

也介绍了一些入门的GC概念。

 

http://developer.51cto.com/art/200906/128944.htm

Java程序性能优化之找出内存溢出元凶

 

本文讲述了内存分析工具:JProbe 并给出了一些导致内存溢出的建议,

那就是不用的对象要设置为null,并保证没有map,list等其他对象保存其引用

 

http://tech.ifeng.com/internet/detail_2011_03/08/5022006_0.shtml

Java内存查看与分析

 

本文讲述了java gc的区域划分,使用java自带的工具进行内存使用情况分析。

提到了jconsole、jmap、jhat、jstat等工具,并深入讲述了eden,susvivor0,susvivor1

 

java.lang.OutOfMemoryError: Java heap space 的解决方法

这篇文章提到了关于java 内存使用情况查看的方法:

 

package longne;  
  
import java.lang.management.CompilationMXBean;   
import java.lang.management.GarbageCollectorMXBean;   
import java.lang.management.MemoryMXBean;   
import java.lang.management.MemoryPoolMXBean;   
import java.lang.management.RuntimeMXBean;   
import java.lang.management.ThreadMXBean;   
import java.util.List;   
import sun.management.ManagementFactory;   
import com.sun.management.OperatingSystemMXBean;   
   
 /** 
 * java获取所在操作系统的信息,JVM的相关信息 
 * @author kongqz 
 * */   
public class MyJvm {   
//    =======================通过java来获取相关系统状态============================  
//        总的内存量 i is 32576  
//        空闲内存量 j is 32357  
//        最大内存量 is 812928  
   
   /** 
     * @param 直接通过jdk来获取系统相关状态,在1.5.0_10-b03版本以上测试通过 
     */   
    public static void main(String[] args) {   
           
         System.out.println("=======================通过java来获取相关系统状态============================ ");   
         int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位   
         System.out.println("总的内存量 i is "+i);   
         int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量   
         System.out.println("空闲内存量 j is "+j);   
         System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024);   
        
         System.out.println("=======================OperatingSystemMXBean============================ ");   
         OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();   
         System.out.println(osm.getFreeSwapSpaceSize()/1024);   
         System.out.println(osm.getFreePhysicalMemorySize()/1024);   
         System.out.println(osm.getTotalPhysicalMemorySize()/1024);   
            
         //获取操作系统相关信息   
         System.out.println("osm.getArch() "+osm.getArch());   
         System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());   
         System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());   
         System.out.println("osm.getName() "+osm.getName());   
         System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());   
         System.out.println("osm.getVersion() "+osm.getVersion());   
         //获取整个虚拟机内存使用情况   
         System.out.println("=======================MemoryMXBean============================ ");   
         MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();   
         System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());   
         System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());   
         //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况   
         System.out.println("=======================ThreadMXBean============================ ");   
         ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();   
         System.out.println("getThreadCount "+tm.getThreadCount());   
         System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());   
         System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());   
         System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());   
         System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());   
            
         //当前编译器情况   
         System.out.println("=======================CompilationMXBean============================ ");   
         CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();   
         System.out.println("getName "+gm.getName());   
         System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());   
           
         //获取多个内存池的使用情况   
         System.out.println("=======================MemoryPoolMXBean============================ ");   
         List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();   
         for(MemoryPoolMXBean mpm:mpmList){   
             System.out.println("getUsage "+mpm.getUsage());   
             System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());   
         }   
         //获取GC的次数以及花费时间之类的信息   
         System.out.println("=======================MemoryPoolMXBean============================ ");   
         List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();   
         for(GarbageCollectorMXBean gcm:gcmList){   
             System.out.println("getName "+gcm.getName());   
             System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());   
         }   
         //获取运行时信息   
         System.out.println("=======================RuntimeMXBean============================ ");   
         RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();   
         System.out.println("getClassPath "+rmb.getClassPath());   
         System.out.println("getLibraryPath "+rmb.getLibraryPath());   
         System.out.println("getVmVersion "+rmb.getVmVersion());   
     }   
    
 } 

 

 

 

 

Java笔记——Java基础知识总结 此时会发现,两者的equals()比较为true,因为只是比较了name和age的值,而hashCode比较则返回false,因为没有重写,所以二者都是使用父类Object中继承而来的方法,各自随机生成,值并不相同,比较结果自然为false。之所以要设置一些受检异常,比如数据库异常、文件读取异常,这些异常都是程序无法提前预料的,但是一旦出问题,就会造成资源被占用,导致程序出现问题,所以我们需要主动捕获这些异常,从而在异常情况下可以做出对应的处理,比如关闭数据库连接,释放文件流等。 阅读详情

相关推荐

(面经总结)一篇文章带你整理面试过程中关于JVM 调优的相关知识

文章目录一、设置 JVM 参数二、jps 指令三、jconsole 指令四、jstat 指令五、jstack 指令六、jmap 指令七、visualvm八、补充 一、设置 JVM 参数 JVM 参数:点击可参考 IDEA 配置JVM的初始堆和最大堆均为 10m: client模式: 初始堆大小:物理内存的1/64,最小为 8MB 最大堆:物理内存没有达到192MB之前,JVM最大堆为物理内存的一半,物理内存大于192MB,但是小于 1GB 时,JVM 最大堆大小为物理内存的 1/4; 大于1GB物理内存

南淮北安的博客 511

获取jvm运行时内存

要获取JVM运行时内存,您可以使用Java的ManagementFactory类和MemoryMXBean接口。运行上述代码,将输出当前JVM堆内存和非堆内存的使用情况,包括已使用内存、最大可用内存和已提交内存。

qq_53943186的博客 694

企业和个人 AI 编程工具怎么选?2025 年 12 款主流工具(Claude/Cursor 等)核心能力 + 收费对比

2025 年最火的 12 款 AI 编程工具,像 Claude、Cursor 这些热门款,我把它们的核心能力、收费标准全扒得明明白白,看完这篇你不用再瞎琢磨,直接就能挑到对的!再说说 Cursor,美国 Cursor Labs 做的,还拿过红杉资本投资,2022 年推出后,2024 年收入直接涨了 6400%,势头很猛。总之,不管你是企业技术管理者、程序员,还是刚入门的 AI 小白,按自己的需求(语言、合规、预算)挑,保准能找到最适合的 AI 编程工具!最后给大家划重点,不同需求直接对号入座:?

hundred98的博客 2801

在java代码中获取JVM参数(转)

近日关注性能调优,关注JMX,发现java.lang.management.*之强大。同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考:   Java代码           MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean();        MemoryUsage usage = m...

weixin_34409703的博客 560

Jupyter Notebook 命名出现“error”且运行后没反应

Jupyter Notebook 命名出现“error”且运行后没反应提前声明错误截图(方便大家看看是不是自己的错误)解决方法 提前声明 我的问题是在看到答主 @开始King的回答后才解决的,因为答主大大的文章后面有些地方不是很详细,我在这里再在King大大的基础上完善一下子 错误截图(方便大家看看是不是自己的错误) 1.命名失败,上面出现一个“error”字样 2.运行失败,无论是点击上方的运行按钮还是按快捷键shift+enter 都只会向下再增加一个代码块,而不会运行程序。 (也不是很多人出现的[*

qq_52770743的博客 1万+

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

Java获取内存使用信息

package test; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.math.BigDecimal; import java.util.logging.L

Sleeping的专栏 911

SAP采购申请详述;以及采购计划协议/交货计划行

SAP采购申请详述;以及采购计划协议/交货计划行

saplakes的博客 4341

JAVA代码获取JVM相关信息

转载大神的文案

个人日常记录,分析 1120

双极性步进电机驱动技术:从H桥电路到精准控制

本文深入解析了双极性步进电机驱动技术的核心,从H桥电路的基础原理讲起,阐述了其作为实现电机正反转和精准控制的关键。文章详细介绍了H桥的工作模式、防共态导通设计,并对比了L298N、DRV8825及TMC2209等主流集成驱动芯片的选型。进一步探讨了通过微步进与电流矢量控制实现平滑、静音运行的高级技术,并提供了基于STM32的实战代码与避坑指南,帮助开发者从理论到实践全面掌握精准运动控制。

tea88的博客 594

Python手记-9:Python LXML库XPath的爬取晋江书目

1. lxml库 lxml是功能最丰富且易于使用的库,用于处理Python语言中的XML和HTML,还可实现WEB爬取,官文参考:https://lxml.de/,完整的PDF文档下载链接https://lxml.de/lxmldoc-4.5.0.pdf,但是阅读起来……em……怪自己不够聪明的样子。 Linux下安装lxml库:[root@chengyu ~]# pip3 instal...

成屿的专栏 4万+

Impala metrics详解之Jvm篇

Impala的web页面提供了非常丰富的信息,其中就包括各种metrics信息。这些metrics非常多,但是官方也没有专门文档解释,所以有时候也看不明白是什么意思。本文笔者将结合代码,跟大家一起学习一下Jvm相关的metrics分别是什么含义,以及如何计算得到的。

skyyws的博客 1762

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?

理解JVM的内存结构,掌握垃圾回收机制,以及预防和解决内存溢出问题,对于写出高效、稳定、安全的Java代码至关重要。而作为Java开发者,持续学习和探索这些领域,将有助于我们不断提升自己的技术水平和解决问题的能力。在Java的世界里,内存管理是一个核心概念。Java的垃圾回收机制自动管理堆内存中的对象,当对象不再被引用时,垃圾回收器会自动回收其占用的内存。垃圾回收的基本原理是追踪哪些对象是不可达的(即没有引用指向它们),然后释放这些对象的内存。例如,如何避免在堆上创建过多的对象,从而减少垃圾收集的频率?

杰哥在此的专栏 1065

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux java内存溢出_linux解决Tomcat内存溢出的问题

Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。一、常见的Java内存溢出有以下三种:1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出解释说明:JVM在启动的时...

weixin_35840316的博客 463

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java内存溢出异常(上)

上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识。如果有没看过上一篇文章的小伙伴们,请点击Java内存区域与内存溢出异常。 Java的内存溢出异常主要分为两类:分别是内存溢出和栈溢出。在以下几种情况,会抛出内存异常:Java堆溢出、虚拟机栈和本地方法栈溢出、方法区和运行时常量池溢出、以及本机直接内存...

weixin_30294709的博客 170

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java内存溢出异常(上),rocketmq原理解析

在Java虚拟机规范中,针对虚 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》 【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享 拟机栈和本地方法栈描述了两种异常: 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。 这种分类不是很清楚,因为太少的内存或太多的堆栈空间会导致堆栈空

m0_64867047的博客 953

Java 内存区域和内存溢出

Java内存区域和内存溢出逻辑图:

Atalanta1的博客 222

什么是内存溢出和内存泄漏?如何解决?

内存溢出(OutOfMemoryError)是指程序在运行时尝试分配内存,但由于没有足够的内存可用,Java 虚拟机(JVM)抛出了错误。常见的内存溢出区域包括堆内存和永久代(在 Java 8 之后被元空间取代)。

zhzjn的博客 2896

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

http://outofmemory.cn/c/java-outOfMemoryError

newbie_God的博客 558

java虚拟机(四)--内存溢出、内存泄漏、SOF

  学习了java运行时数据区,知道每个内存区域保存什么数据,可以参考:https://www.cnblogs.com/huigelaile/p/diamondshine.html,然后了 解内存溢出和内存泄露是很有必要的,一方面是为了面试,更重要是的在工作中能够快速定位错误原因并且解决 内存溢出分类: 1、java.lang.OutOfMemoryError: Java Heap spac...

weixin_30770783的博客 104

java面试核心知识点合集(持续更新~~~)

本文整理了Java面试核心知识点,涵盖JVM、内存管理、垃圾回收、性能调优等核心内容。详细解析了JVM内存模型(方法区、堆、栈等)、垃圾回收算法(标记清除、复制、分代回收等)、常见GC类型(Minor/Full GC)及触发条件。介绍了CMS、G1等主流垃圾回收器特点,提供了JVM调优参数配置建议。还包含类加载机制、双亲委派模型等高级主题。适合Java开发者系统复习面试重点知识,帮助深入理解JVM工作原理和性能优化方法。

2301_79892101的博客 1681

java 二维数组内存溢出_Java内存泄露和内存溢出详解—面试必备问题

一、基础概念1.内存溢出: out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;2.内存泄露 :memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导致out of memory。 二、以发生的方式来分类,内存泄...

weixin_39543652的博客 456

java 检查内存溢出_使用jvisualvm.exe工具查看java项目内存溢出(堆溢出)--制造内存溢出...

在查看内存溢出的时候,我们需要明白,堆溢出和持久代溢出,他们不一样,说到内存泄漏,我们就需要明白,内存中 年老代和新生代,和持久代,这3块的数据自己的理解:new了一个对象,会进入到堆里面,先放到年轻代中 也就是new generation ,他放到eden中,如果eden满了,就会进行一次yong gc ,如果还有存活对象(被用到的对象)就会被移到S0区或者S1中转移,如果s0和S1都已经满了...

weixin_34175978的博客 565

三十三.Jmeter内存溢出原因及解决方法

【代码】三十三.Jmeter内存溢出原因及解决方法。

欢迎来到本博客! 146
上一篇: ssh key
下一篇: 关于ThreadLocal
xiaoxinphp
博客等级 码龄18年 1粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值