南宁优就业IT培训学校 |
内存管理是程序员在学习java编程开发语言的时候需要重点掌握的技术知识之一,而今天我们就一起来了解一下,java编程开发中的内存溢出与内存泄露问题。
1、内存溢出
内存溢出:OOM(OutOfMemoryError)异常,即程序需要内存超出了虚拟机可以分配内存的大范围。在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他区域都可能发生异常。
2、内存溢出区域
常见的内存溢出分为以下几种:
2.1Java堆溢出
Java堆用于存储对象实例,只要不断地创建对象,并且增加垃圾回收机制清除这些对象,那么在对象数量达到大堆限制就会产生内存溢出异常。
测试方案:无限循环new对象实例出来,在List中保存引用,防止GC回收,终会产生OOM,异常堆栈信息并提示Javaheapspace。
2.2虚拟机栈和本地方法栈溢出
关于虚拟机栈和本地方法栈,Java虚拟机规范中定义了两种异常:
如果线程请求的栈深度大于虚拟机所允许的大深度,将抛出StackOverflowError异常。
如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
多线程条件下,无限循环地创建线程,并为每个线程无限循环的增加内存,终会导致OutOfMemoryError异常。
这里有一点要重点说明,在多线程情况下,给每个线程的栈分配的内存越大,反而越容易产生内存产生内存溢出一场。操作系统为每个进程分配的内存是有限制的,虚拟机提供了参数来控制Java堆和方法区这两部分内存的大值,忽略掉程序计数器消耗的内存(很小),以及进程本身消耗的内存,剩下的内存便给了虚拟机栈和本地方法栈,每个线程分配到的栈容量越大,可以建立的线程数量自然就越少。因此,如果是建立过多的线程导致的内存溢出,在不能减少线程数的情况下,就只能通过减少大堆和每个线程的栈容量来换取更多的线程。
2.3方法区和运行时常量池溢出
运行时常量池是方法区的一部分。方法区用于存放Class的相关信息,如类名,访问修饰符,常量池,字段描述,方法描述等。测试方法:
(1)对于非常量池部分,运行时生成大量的动态类填满方法区;
(2)对于常量池部分,无限循环调用String的intern()方法产生不同的String对象实例,并在List中保存其引用,以防止被GC回收,终会产生溢出。
2.4本机直接内存溢出
此类内存溢出一个明显的特征是在HeapDump文件中不会看见明显的异常,如果发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,可以考虑一下是不是这方面原因。
3、内存泄露
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你OOM。
Java内存泄漏的根本原因是长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收。
3.1.1静态集合类引起内存泄漏
像HashMap、Vector等的使用容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。
3.1.2监听器
在java编程中,我们都需要和监听器打交道,通常一个应用当中会用到很多监听器,我们会调用一个控件的诸如addXXXListener()等方法来增加监听器,但往往在释放对象的时候却没有记住去删除这些监听器,从而增加了内存泄漏的机会。
3.1.3各种连接
比如数据库连接(dataSourse.getConnection()),网络连接(socket)和io连接,除非其显式的调用了其close()方法将其连接关闭,否则是不会自动被GC回收的。对于Resultset和Statement对象可以不进行显式回收,但Connection一定要显式回收,因为Connection在任何时候都无法自动回收,而Connection一旦回收,Resultset和Statement对象就会立即为NULL。但是如果使用连接池,情况就不一样了,除了要显式地关闭连接,还必须显式地关闭ResultsetStatement对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement对象无法释放,从而引起内存泄漏。这种情况下一般都会在try里面去的连接,在finally里面释放连接。
学Java全栈,就业前景广阔
Java学员就业平均薪资
Java学员2019年8月 |
|
Java学员2019年7月 |
|
Java学员2019年6月 |
|
Java学员2019年5月 |
10823元 就业平均薪资 |
|
10541元 就业平均薪资 |
|
9540元 就业平均薪资 |
|
10543元 就业平均薪资 |
查看本月数据 |
|
查看本月数据 |
|
查看本月数据 |
|
查看本月数据 |
|
|
|
|
|
|
|
Java学员2019年4月 |
|
Java学员2019年3月 |
|
Java学员2019年2月 |
|
Java学员2019年1月 |
12750元 就业平均薪资 |
|
10642元 就业平均薪资 |
11400元 就业平均薪资
|
|
10815元 就业平均薪资 |
|
查看本月数据 |
|
查看本月数据 |
|
查看本月数据 |
|
查看本月数据 |
Java开发核心技术实战
|
|
|
电商平台搭建 |
|
分布式项目实战 |
从0开始,完成整个电商平台的开发,学习开发基本流程。 |
|
Dubbox分布式调用技术,学习zookeepr分布式应用协调服务,学习分布式系统的应用场景。 |
|
|
|
|
|
|
高并发项目实战 |
|
微服务技术实战 |
NoSQL的实战,高并发方案以及具体的实现 |
|
学习SpringBoot框架以及SpringCloud微服务架构学习微服务搭建开发流程 |
|
|
|
领取完整课程大纲 |
优就业&太极共建Java名企直聘班
关于太极
太极计算机公司成立于1987年,国有控股上市企业,大型IT综合性信息系统产品服务提供商, 是中国首批进入"火炬计划软件产业基地"的骨干企业之一,曾任铁道部12306“新一代客票系统一期工程项目”升级运营商。
关键领域和重要行业重大信息系统总体建设单位
|
|
优就业与太极共建Java名企直聘班,双方整合优势资源,借助太极计算机公司的技术实力和生产平台, 帮助优就业培训学员锻炼实战能力。同时,持续为课程输出前沿技术,让企业成为学员的实践、就业平台,共同培育高素质IT人才。 |
太极投入IT研发技术和团队,由集团工程师手把手带学员项目实训。 实训结束后有机会直接留在太极或者推荐到北软会员单位 结业之后可从事软件开发岗、技术支持岗两个方向 |
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/news/274640/违者必究! 以上就是南宁优就业IT培训学校 小编为您整理南宁Java培训机构费用_收费标准的全部内容。