java的内存管理机制
1、内存区域的分类
栈内存:基本类型变量和对象的引用,优势在于存取速度快
堆内存:new创建的对象和数组以及对象的实例化变量,优势在于动态分配内存,但是存取速度相对较慢
2、不同类型的内存分配
(1)基本数据类型:类似int,char,double之类的数据类型
当使用int a;来定义的时候,会在栈空间分配一个空间来存a(此时为空);当使用int a=2;来定义的时候,会在栈空间分配一个空间来存a,同时去找有没有值为2的内存空间,如果有就把a的地址空间指向2的地址空间,如果没有就创建值为2的地址空间,把a的地址空间指向那个地址空间。
(2)对象
对对象的内存分配主要是在栈空间存放对象的地址(对应的堆空间的地址),在堆空间存放对象
(3)String
String其实就是一个类,但是有比较特殊的地方。
String s = new String(“Hello,World!”); 和 String s = “Hello,World!”; 是不一样的:
前者和普通类是一样的,后者与基本类型类似,会先去找有没有”Hello,World!”,如果没有才会去创建一个值为”Hello,World!”的对象,然后栈空间存放这个对象的在堆中的地址(记这个栈空间的地址为X,X不是对象在堆中的地址),s在栈空间的值是X。
(4)数组
栈中存放数组在堆中的首地址,堆中分配数组。
(5)方法调用时的内存分配
实例变量和对象在堆中,局部变量在栈中(方法执行完成之后就会被回收)
3、垃圾回收机制
(1)方式
JVM自己回收或者是system.gc();请求回收。
(2)对象
1)空引用:String s = null;此时s就会被回收
2)没有引用:String s = “a”;s = “b”;那么a就变成“无主孤魂”就会被回收
3)过期:方法运行完成后,方法中的局部变量就会被回收
4)互相引用:对象A引用了对象B,B直接或者间接引用了对象A,而且A和B都不被其他对象所引用,这样也会被回收
(3)垃圾回收算法
http://speed847.iteye.com/blog/373278
java的内存管理机制的更多相关文章
- Java虚拟机内存管理机制
自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区 ...
- Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...
- 深入理解Java虚拟机—内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...
- Java的内存管理机制之内存区域划分
各位,好久不见.先做个预告,由于最近主要在做Java服务端开发,最近一段时间会更新Java服务端开发相关的一些知识,包括但不限于一些读书笔记.框架的学习笔记.和最近一段时间的思考和沉淀.先从Java虚 ...
- Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
- Java自动内存管理机制
1.运行时数据区域划分 2.程序计数器 作用:可以看做是当前线程所执行的字节码的行号指示器. 解释:字节码指示器就是通过改变程序计数器的值来指定下一条需要执行的指令.分支,循环等 基础功能就是依赖程序 ...
- 浅析java内存管理机制
内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...
- JVM自动内存管理机制——Java内存区域(下)
一.虚拟机参数配置 在上一篇<Java自动内存管理机制——Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a) ...
- java内存管理机制剖析(一)
最近利用工作之余学习研究了一下java的内存管理机制,在这里记录总结一下. 1-1.java内存区域 当java程序运行时,java虚拟机会将内存划分为若干个不同的数据区域,这些内存区域创建和销毁的时 ...
随机推荐
- js 设计模式——观察者模式
观察者模式 定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状 ...
- 洛谷P4245 【模板】MTT(任意模数NTT)
题目背景 模板题,无背景 题目描述 给定 22 个多项式 F(x), G(x)F(x),G(x) ,请求出 F(x) * G(x)F(x)∗G(x) . 系数对 pp 取模,且不保证 pp 可以分解成 ...
- Nginx Location模块
相关知识点:URI:统一资源标识符,是一个用于标识某一互联网资源名称的字符串,该种标识允许用户对任何的资源通过特定的协议进行交互操作.URL:统一资源定位符,由三部分组成(1)http://协议 (2 ...
- 网格布局(GridLayout) 行数与列数
1.如果网格布局对象未指定具体的“行数”和“列数”,那么它将拥有1行和动态的列数. import java.awt.Button; import java.awt.Frame; import java ...
- Kali渗透测试1-Netcat
What is Netcat? Netcat is a featured networking utility which reads and writes data across network c ...
- R语言爬虫:使用R语言爬取豆瓣电影数据
豆瓣排名前25电影及评价爬取 url <-'http://movie.douban.com/top250?format=text' # 获取网页原代码,以行的形式存放在web 变量中 web & ...
- jQuery学习-尺寸坐标
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【转载】COM 组件设计与应用(十三)——事件和通知(VC6.0)
原文:http://vckbase.com/index.php/wv/1243.html 一.前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者: 我的 COM 组件 ...
- 2_C语言中的数据类型 (五)char
1.1 char类型 1.1.1 char常量,变量 char c:定义一个char变量 ‘a’,char的常量 Char的本质就是一个整数,一个只有1个字节大小的整数 ...
- 单元测试时 出现找不到类或者 NoClassDefFoundError 的问题
这种情况下,启动或重启下服务器即可