java 内存回收-java手动回收内存问题

问题描述

java手动回收内存问题

一个javaweb项目上线需要导入2W条数据,我先将数据转为list集合,再循环集合插入到数据库中,每次循环后我将对象设置为null,且在方法体结尾手动清空了集合,可使用jconsole.exe监控项目,内存涨了300M,且观察N久都没下降,
清空对象代码方式如下:
listProducts.clear();
listProducts = null;
mapList.clear();
mapList=null;
attributes.clear();
attributes = null;
unitsmap.clear();
unitsmap = null;
tempUnitsmap.clear();
tempUnitsmap = null;

解决方案

继续执行,内存涨到一定程度就不会涨了.
java进程,启动时候有内存分配参数,

解决方案二:

你可以试图调用System.gc(),但是这并不能保证gc会真的开始,当你的内存还有空间的时候,jvm并不会主动的清理内存。如果这些对象真的是很短时间就不用了,你可以通过jvm参数调整新生代大小 -X:MaxNewSzie=100M,但是貌似你这些对象很大,他们有可能直接就进到老年代了,这个时候你倒是要
调大新生代大小。这些做法都要基于你的观察。没有万能的解决方案


时间: 2024-12-04 00:47:46

java 内存回收-java手动回收内存问题的相关文章

Java技术专题之JVM逻辑内存回收机制研究图解版

一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JVM两个子系统:类加载子系统和执行引擎子系统: 2.JVM两个组件:本地接口方法组件和内存空间组件. 2.JVM内存空间分为:Java堆,Java栈.方法区和本地方法区 关键词:我们经常讨论的JVM内存回收机制就是指Java堆内存回收机制. 四.JVM内存组成结构 上图所示四部分即为JVM内存组成结构

Java进阶10 内存管理与垃圾回收

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. Java是在JVM所虚拟出的内存环境中运行的.内存分为栈(stack)和堆(heap)两部分.我们将分别考察这两个区域.   栈 栈的基本概念参考纸上谈兵: 栈 (stack).许多语言利用栈数据结构来记录函数调用的次序和相关变量(参考Linux从程序到进程). 在Java中,JVM中的栈记录

Java进阶学习(十) 内存管理与垃圾回收

整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. Java是在JVM所虚拟出的内存环境中运行的.内存分为栈(stack)和堆(heap)两部分.我们将分别考察这两个区域. 栈 栈的基本概念参考纸上谈兵: 栈 (stack).许多语言利用栈数据结构来记录函数调用的次序和相关变量(参考Linux从程序到进程). 在Java中,JVM中的栈记录了线程的方法调用.每个线程拥有一个栈.在某个线程的运行过程中,如果有新的方法调用,那么该线程对应的栈就会增加一个存储单元,即帧

深入探索Java工作原理:JVM,内存回收及其他

Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种Web应用.同时,为了提高 Java语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java具有其独特的工作原 理. 1.Java虚拟机 Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在 计算机中还是在其他电子设备中)安全兼容地执行保存在.class文件中的字节码.Java虚拟机的"机器码 "保存在.class文件中,有时也可以

探秘Java虚拟机——内存管理与垃圾回收

1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB):默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 -Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中

Java内存管理和垃圾回收

笔记,深入理解java虚拟机   Java运行时内存区域 程序计数器,线程独占,当前线程所执行的字节码的行号指示器,每个线程需要记录下执行到哪儿了,下次调度的时候可以继续执行,这个区是唯一不会发生oom的 栈,线程独占,包含虚拟机栈或native method stack,用于存放局部变量的 堆,线程共享,用于分布对象实例的,后面说的内存管理和垃圾回收基本都是针对堆的 方法区,线程共享,用于存放被虚拟机加载的类,常量,静态变量; Java虚拟机规范,把方法区描述为堆的逻辑部分,所以也被称为"永久

浅析Java内存模型与垃圾回收_java

1.Java内存模型 Java虚拟机在执行程序时把它管理的内存分为若干数据区域,这些数据区域分布情况如下图所示: 程序计数器:一块较小内存区域,指向当前所执行的字节码.如果线程正在执行一个Java方法,这个计数器记录正在执行的虚拟机字节码指令的地址,如果执行的是Native方法,这个计算器值为空. Java虚拟机栈:线程私有的,其生命周期和线程一致,每个方法执行时都会创建一个栈帧用于存储局部变量表.操作数栈.动态链接.方法出口等信息. 本地方法栈:与虚拟机栈功能类似,只不过虚拟机栈为虚拟机执行J

探秘Java虚拟机——内存管理与垃圾回收(转)

本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索. 1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB):默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 -Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制

Java程序内存分析Java VisualVM(Visual GC)

VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回收器.执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作. 在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势.内存消耗详细状况. 一  Visual GC(监控垃圾回收器) Java Visu