内存溢出

JAVA ThreadLocal对象浅析

亡梦爱人 提交于 2021-01-21 22:22:45
最近在开发过程中,在做一个字典项服务的时候,最开始采用了ThreadLocal对象来缓存数据。在使用ThreadLocal过程中遇到一些问题,这里和大家分享一下。 一、 什么是 ThreadLocal ? 顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本。从线程的角度看,就好像每一个线程都完全拥有该变量。 它主要由四个方法组成initialValue(),get(),set(T),remove(),其中initialValue()方法是一个protected的方法,只有在重写ThreadLocal的时候有用。 void set(T t):为调用该方法的线程存入一个本线程变量。 T get(): 返回本线程存入ThreadLocal中的值,没有返回空。 void remove(): 移除本线程存入ThreadLocal中的值。 T initialValue():用于在为null时,生成一个初始值,ThreadLocal直接返回一个null值。 二、 ThreadLocal 的原理 在查看了java源码后发现,ThreadLocal通过使用ThreadLocalMap(注:这里的Map非java.util.Map子类)实例来存储”线程局部变量”,当第一次设值的时候,如果map为空,则创建一个map并set入值

linux学习笔记

吃可爱长大的小学妹 提交于 2020-11-06 05:42:59
启动tomcat项目重复加载问题 开始是将项目直接拷贝到tomcat7/bin/webapps目录下,初始配置文件为: <Host name="www.xxxx.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/var/tomcat/tomcat7/webapps/qclife" debug="0"/> </Host> 成功部署项目后,以日志方式启动tomcat,发现项目启动了两次。于是将配置将配置文件改为: <Host name="www.xxxx.com" appBase="" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/var/tomcat/tomcat7/webapps/qclife" debug="0"/> </Host> 此时发现,项目启动只用了十秒,配置成功。访问项目时也不许要带项目名称,可直接访问。 tomcat内存优化 随着项目的逐渐完善,启动时加载的类或jar包比较多,优化tomcat内存配置可以避免内存OutofMemory. 修改启动文件 vi /var/tomcat/tomcat7/bin/catalina.sh 在注释之后正文之前加入如下参数:

Tomcat内存溢出原因分析

为君一笑 提交于 2020-04-25 08:11:05
Tomcat内存溢出的原因    在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存溢出是不一样的,当然处理方式也不一样。    这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况:    1.OutOfMemoryError: Java heap space    2.OutOfMemoryError: PermGen space    3.OutOfMemoryError: unable to create new native thread.     Tomcat内存溢出解决方案    对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize -XX:MaxPermSize)    最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。    第一种:是堆溢出。    原因分析: JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured

JVM实用参数(四)内存调优

混江龙づ霸主 提交于 2020-04-08 13:15:35
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。 所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分:新生代(young generation)里存储着新分配的和较年轻的对象,老年代(old generation)里存储着长寿的对象。在此之外,永久代(permanent generation)存储着那些需要伴随整个JVM生命周期的对象,比如,已加载的对象的类定义或者String对象内部Cache。接下来,我们将假设堆内存是按照新生代、老年代和永久代这一经典策略划分的。然而,其他的一些堆内存划分策略也是可行的,一个突出的例子就是新的G1垃圾回收器,它模糊了新生代和老年代之间的区别。此外,目前的开发进程似乎表明在未来的HotSpot JVM版本中,将不会区分老年代和永久代。 -Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize) -Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大小。一般来说

堆内存溢出、栈内存溢出、栈溢出笔记

与世无争的帅哥 提交于 2020-04-08 10:56:14
堆内存溢出:堆内存放的都是对象,当引用对象占用内存超过分配的堆内存就会发生堆内存溢出。比如,堆分配1M内存,但是一个List中存放2M就会发生堆内存溢出。 栈内存溢出:栈内存溢出是指,分配的栈内存不够使用,导致栈内存溢出。比如多线程访问,每一个线程都会分配一个栈空间,如果线程足够多,分配的栈内存空间自然也会多,发生栈内存溢出。 栈溢出:栈溢出是指在压栈的过程中超出栈的深度,每调用一个方法都会进行压栈操作。当调用方法非常多时,导致超出栈的深度发生栈溢出,比如递归方法。 来源: oschina 链接: https://my.oschina.net/uwith/blog/3224474

内存溢出和内存泄露的区别

徘徊边缘 提交于 2020-03-31 11:49:19
   内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。   内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。   memory leak会最终会导致out of memory!   内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出. 以发生的方式来分类,内存泄漏可以分为4类: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的

java中内存泄露和内存溢出

回眸只為那壹抹淺笑 提交于 2020-03-31 11:48:36
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 memory leak会最终会导致out of memory! 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出. 以发生的方式来分类,内存泄漏可以分为4类: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境

iis应用程序池 内存溢出错误 System.OutOfMemoryException

与世无争的帅哥 提交于 2020-03-30 14:04:49
在博客园看到了一位园友写的文章 《如何处理 OutOfMemoryException 异常?》 ,于是想和大家交流一下 ASP.NET 中出现 OutOfMemoryException 的问题。 实际上,在 ASP.NET Web 服务器上, ASP.NET 所能够用到的内存,通常不会等同于所有的内存数量。在 machine.config 配置文件中,配 置 节 <processModel> 中有一个属性 “memoryLimit” ,这个属性的值是一个百分值,默认为 “60” ,即指定了 ASP.NET 进程(在任务管理器中大家就可以看到 ASP.NET 的进程, IIS5 中为 aspnet_wp , IIS6 中为 w3wp )能够使用所有物理内存的 60% 。当 ASP.NET 使用的内存量超过这个限额时, IIS 会开始自动回收( recycle )进程,即创建一个新的进程去负责应付 Ht tp 请求,而将旧进程所占用的内存回收。 当我们有一台很大内存的服务器时, “memoryLimit” 这个值是需要进行适当的调整的。比如我们准备了一台 ch emas-microsoft-com ffice marttags" />t="on"> 4G 内存的服务器,那么 t="on"> 4G ×60% = t="on"> 2.4G 。但是,对于 Win32 操作系统

XML文档的解析—dom4j

若如初见. 提交于 2020-03-30 04:03:04
XML为可扩展标记语言,它主要是用来保存数据,做配置文件,数据传输载体等。其实就是一个后缀名为.xml的文件。 XML命名规则 名称可以含字母、数字以及其他的字符 名称不能以数字或者标点符号开始 名称不能以字符 “xml”(或者 XML、Xml)开始 名称不能包含空格 文档声明 例如此声明:<?xml version="1.0" encoding="gbk" standalone="no" ?> (1)version : 解析这个xml的时候,使用什么版本的解析器解析 (2)encoding : 解析xml中的文字的时候,使用什么编码来翻译 (3)standalone:no - 该文档会依赖关联其他文档 , yes-- 这是一个独立的文档 注意:保存XML文件使用的编码格式与encoding定义的编码格式需一致,否则显示中文时会发生乱码,推荐使用UTF-8编码格式保存文档。 文档结构说明 根元素(rootElement):文档声明下来的第一个元素; 子元素(Element):除根元素的其他元素; 属性(Attribute)的定义:定义在元素里面, <元素名称 属性名称="属性的值"></元素名称>。 1 <?xml version="1.0" encoding="UTF-8"?> 2 <students> 3 <fristStu id="firstName"> 4 <name>张三

内存泄漏和内存溢出

我怕爱的太早我们不能终老 提交于 2020-03-27 11:17:52
泄漏:就是内存申请后,用完没有释放,造成可用内存越来越少。 溢出:指用户实际的数据长度超过了申请的内存空间大小,导致覆盖了其他正常数据,容易造成程序异常,严重的,攻击者可以以此获取程序控制权。 溢出:你打开画本,画啊画,画满了,就画到桌子上了 泄漏:你打开画本,画一页又一页,突然发现有一页被人画过了 来源: https://www.cnblogs.com/mqflive81/p/12552812.html