java 内存机制简介
java内存回收机制
不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。java中对象是采用new或者反射的方法创 建的,这些对象的创建都是在堆中分配,所有对象的回收都是由java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状 况,对他们的申请、引用、被引用、赋值等状况进行监控,java会使用有向图的方法进行管理内存,实时监控是否可以到达,如果不可达,则将其回收,这样也 可以消除应用循环的问题。在java语言中,判断一个内存空间是否符合垃圾收集标准有两个:一个给对象赋予了空值null,以下再没有调用过。另一个是给 对象赋予了新值,这样重新分配了空间。
java内存泄露和内存溢出
java内存泄露就是没有及时清理内存垃圾,导致系统无法再提供给你内存资源(内存资源耗尽);而java内存溢出就是你要求分配的内存超出了系统所能给你的,系统不能满足需求,于是产生溢出。
java内存泄露和内存溢出的区别
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求, 于是产生溢出。
java内存泄露就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源。
1、java内存泄露其实就是程序的逻辑问题,造成申请的内存无法释放,这样的话无论多少内存,早晚会被占用光。最简单的例子就是死循环。由于程序判断错误经常出现此类问题。
2、java内存泄露是指在堆上分配的内存没有被释放,从而失去对其控制。这样会造成程序能使用的内存越来越少,导致系统运行速度减慢,严重情况会使程序当掉。
3、内存溢出是比如你申请了一个Integer,但是你存了一个long类型才能存下的数,那么就会造成内存溢出。
区别:内存溢出是提供的内存不够;内存泄露是无法提供内存资源。
java内存泄露的几个原因
1、静态集合类象Hash、Vector等的使用最容易引起内存泄露,这些静态变量的声明周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将被Vector等应用着。
2、内部类和外部类的使用容易引起内存泄露的问题。内部类的引用时比较容易遗忘的一种,而且一旦没有释放就可能导致一系列的后继类对象没有释放。此 外程序员还要小心外部模块的不经意的引用。例如程序员A负责A模块,调用了B模块的一个方法如:public void registerMsg(Object b);这种调用就要非常小心,传入了一个对象,很可能模块B就保持了对该对象的引用,这时候就需要注意模块B是否提供相应的操作去除引用。
3、监听器的使用,java往往会用到监听器,在释放对象的时候没有响应删除监听器的时候也可能导致内存泄露。
4、大量临时变量的使用,没有及时将对象设置为null也可能会导致内存的泄露。
5、数据库的连接没有关闭的情况,包括连接池方法链接数据库,如果没有关闭ResultSet等也可能会出现内存泄露的问题。数据库连接,网络连接 和io连接,除非其显式调用了其close()方法将其连接关闭,否则是不会自动被GC回收的。对于ResultSet和Statement对象可以不进 行显示回收,但Connection一定要现实回收,因为Connection在任何时候都无法自动回收,而Connection一旦回 收,ResultSet和Statement对象就会被设置为null,但是如果没有连接池,情况就不一样了,除了要显示地关闭连接,还必须显示关闭 ResultSet Statement对象(关闭其中一个,另一个也会关闭),否则就会造成大量Statement对象无法释放,从而引起内存泄露。这种情况下一般都会在 try里面去连接,在finally里面释放连接。
java 内存机制简介的更多相关文章
- java基础知识(四)java内存机制
Java内存管理:深入Java内存区域 上面的文章对于java的内存管理机制讲的非常细致,在这里我们只是为了便于后面内容的理解,对java内存机制做一个简单的梳理. 程序计数器:当前线程所执行的字节码 ...
- java内存机制 垃圾回收
gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...
- java 内存机制
1.Java的内存机制 Java 把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在 ...
- java内存机制和GC垃圾回收机制
Java 内存区域和GC机制 转载来源于:https://www.cnblogs.com/zhguang/p/3257367.html 感谢 目录 Java垃圾回收概况 Java内存区域 Java对象 ...
- Java内存机制,内存地址
问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...
- java内存区域简介
运行时数据区域 1.程序计数器:是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理. ...
- Java SPI机制简介
SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现 ...
- Java 内存机制、内存泄露
http://wenku.baidu.com/view/61f31da6284ac850ad02423e.html 自己注:hashset和hashmap不同 JDK1.6 API 中 HashSet ...
- JAVA内存机制
Java程序运行时,数据会分区存放,JavaStack(Java栈). heap(堆).method(方法区). 一.JVM内存模型 1.Java栈Java栈的区域很小,只有1M,特点是存取速度很快, ...
随机推荐
- jquery一个按钮全选和反选
1.jquery实现复选框全选和反选的方式有好几种,今天遇到一个问题,只用下边的方式生效:function checkAll(){ var check=$('#check_all').is(':che ...
- Visual Studio常用插件
Visual Assist X 番茄不用说了,C# C++编码必备 Image Insertion 可以在代码编辑器中插入图片注释,让代码像Word文档一样图文并茂. 但注意必须是PNG格式的图片,直 ...
- 使用Android studio 出现的问题解决
问题一.安装过程中出现的报错Failed to install Intel HAXM 解决:重启电脑,启动BIOS,我的是惠普的,开机时按F10就进去了 切换到Configuration选项,将设置I ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- C++全局和静态变量初始化
转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...
- 使用ajax登录格式
登录页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- react项目组件化思考
三个原则 single store render from top immutable data single store,便于组件之间通信. render from top,因为store就一个,每 ...
- flex 4.6 移动开发 app.xml配置说明
<?xml version="1.0" encoding="utf-8" standalone="no"?> <appli ...
- 智能设备逆向工程之外部Flash读取与分析篇
智能设备逆向工程之外部Flash读取与分析篇 唐朝实验室 · 2015/10/19 11:19 author: rayxcp 0x00 前言 目前智能家居设备的种类很多,本文内容以某智能豆浆机为例完成 ...
- Java文件操作与输入输出流
文件操作 package ch15; import java.io.*; /** * Created by Jiqing on 2016/12/28. */ public class FileTest ...