java虚拟机学习记录(内存划分、垃圾回收、类加载等机制)

- Java堆:是程序中内存管理最大的一部分,主要存放Java中的对象的实例、数组,堆里面为了内存回收方便化分了老年代和新生代区域。
- 方法区:方法区也可以理解为常说的永久代,和堆类似,只是逻辑上存放的数据不同,主要存放被虚拟机加载的类信息、常量、静态变量、缓存的常量池等。既然是永久代,一般方法去的内存很少被回收,相对来说最稳定。
- 虚拟机栈:存放线程运行时的上下文信息,栈内部包括栈帧,每个栈帧代表一个方法调用,方法的调用体现在栈帧的入栈和出栈,每个栈帧内部都存在一个局部变量表,用于存放方法内的变量,包括基本数据类型和引用数据类型,引用数据类型时这里只存放引用,地址指向的是堆中的一块内存区域。
- 本地方法栈:与虚拟机栈类似,不同为这里存放的是本地方法调用的运行数据,在java中声明的native方法。
- 程序计数器:用于记录当前线程执行到那个位置,线程内执行流程的控制依赖程序计算器来完成。
- 引用计数算法:通过建立对象引用的计算器,每增加一个引用引用数+1;引用失效时-1;引用数为0代表这个时候这个对象已经没有被用到了,可以回收。
- 可达性分析算法:通过路径查找的方式判断对象是否可以到达,通过维护一个“GC Roots”集合代表顶层对象,在此顶层对象的“引用链”之外的对象,说明是一个不能到达的对象,可以放心回收了。
- 标记-清除算法:最基础的一个算法,第一步先标记出需要回收的对象,然后统一清除。标记清除有两个缺点:第一,执行效率不稳定,如果大部分都是需要回收的对象,标记清除效率较低;第二,清除后会造成内存的不连续,大量的碎片,如果创建一个大对象没有连续的内存又需要执行垃圾回收。
- 标记-复制算法:标记复制算法是为了避免标记清除算法对于大部分对象需要回收执行效率率低的问题,把内存区域划分了两部分,把需要回收的一部分复制到另外一边,然后执行整块区域的回收,两块区域交替的使用。这种算法缺点是浪费了一半内存空间,所以有一个优化的方案,把内存区域拆分成三快,一块Eden两块Survivor,HotSpot的两者比例是8:1,Eden存放新分配的对象,每次回收时把存放的对象复制到其中一块空闲的Survivor,清除Eden另外一块Survivor空间,交替的使用、清除Survivor空间;这种情况下存放数据的区域有90%,只有10%的空间浪费,空间利用很好,但是需要考虑当存活的对象大于10%时,这种情况就需要借用老年代,把它分配到老年代。
- 标记-整理算法:整理算法是在标记清除和标记复制之间折中的一种算法,使用标记清除,但是定期整理,把不连续的内存整理到一块去,解决了内存的碎片和空间上的浪费。缺点是每次整理是一个很负重的操作,会造成用户程序的暂停。
- 大多数情况下对象在堆中的新生代Eden空间分配,当Eden没有空间时会触发一次GC。
- 当Eden空间不够或一个大的对象(例如大的数组)创建将分配到老年代。
- 长期存活的新生代对象会转移到老年代,在新生代的对象每熬过一次GC,年龄加1,默认15岁时将会移动到老年代。
- 加载:类的字节码加载到虚拟机,通过类加载器加载到虚拟机,默认通过Java的引导类加载(Bootstrap),也可以通过自定义的类加载器加载,加载的不一定必须是一个本地文件,只要是符合要求的二进制字节码即可,可以来源于网络或数据库。
- 验证:验证字节码的正确性,是否是一个合格的字节码文件,保证虚拟机的运行安全。
- 准备:分配内存和初始化零值。
- 解析:符号引用替换成直接引用,符号引用是字面量的形式,前面已经分配了内存,这里替换成指向的内存地址。
- 初始化:类加载的最后一步,执行程序代码里的初始化,包括静态代码块,构造方法,默认字段值。
.png)
- lock和unclock: 对主内存的变量进行加锁和解锁,锁定后其他线程将不可操作。
- read和load: read从主内存读取一个变量到工作内存,load放入读取的变量放到工作内存中。
- store和write: store把一个工作内存的变量传递到主内存中,write把传递过来的变量写入主内存。
- use: 把一个工作内存中的变量传递给执行引擎使用。
- assign: 把从执行引擎接收到的赋值给工作内存的变量。
java虚拟机学习记录(内存划分、垃圾回收、类加载等机制)的更多相关文章
- Java虚拟机学习 - 对象内存分配与回收 ( 5 )
对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制
ClassLoader的工作机制 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader. ...
- Java 虚拟机学习记录
参考资料 JVM高级特性与最佳实践-周志明 HotSpot 虚拟机垃圾回收调优指导 JVM 标准(Java SE 8) JSR 133 Java平台内存模型与线程修订版 命令行工具 JDK Vs JR ...
- JAVA虚拟机运行时内存划分--运行时数据区域
Java虚拟机在执行java程序时会把内存划分为以下几个不同的数据区域: java虚拟机内存划分(运行时)1.线程私有的: 程序计数器(Program Counter Register):可以看作当前 ...
- 深入理解JAVA虚拟机之JVM性能篇---垃圾回收
一.基本垃圾回收算法 1. 判断对象是否需要回收的方法(如何判断垃圾): 1) 引用计数(Reference Counting) 对象增加一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...
- 转!!Java虚拟机堆的内存分配和回收
Java内存分配和回收,主要就是指java堆的内存分配和回收.java堆一般分为2个大的区域,一块是新生代,一块是老年代.在新生代中又划分了3块区域,一块eden区域,两块surviver区域.一般称 ...
- Java虚拟机面试重点-------------内存分配和回收策略
1 对象优先分配在Eden区 对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配.当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC. 新生代GC(Ninor ...
随机推荐
- JS数组去重算法
思路: 1.创建一个新的数组存放结果 2.创建一个空对象 3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为 ...
- Zabbix-3.0.3实现微信(WeChat)报警
转自:http://blog.sina.com.cn/s/blog_87113ac20102w7hp.html Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来 ...
- TCP 的三次握手和四次挥手
参考资料: 1.TCP的三次握手与四次挥手理解及面试题: 2.Http协议三次握手和四次挥手: 3.TCP通信的三次握手和四次撒手的详细流程(顿悟) 前置: 序号(也称序列号) - Sequence ...
- 详解 Filter 过滤器
1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...
- Bitstream or PCM?
背景 提问 讨论精选 一 二 三 四 五 最后 电视上同轴输出的做法. 背景 USB通道下播放声音格式为AAC的视频文件,同轴输出设置为Auto,功放没有声音,设置成PCM,有声音. 提问 Auto/ ...
- Dream权限追踪系统<=2.0.1 重安装漏洞
在./install/install.php中 if(file_exists('lock.txt')){ echo '系统已安装,请不要重复安装!如需安装,请删除install文件夹下的lock.tx ...
- 安卓权威编程指南 -笔记(18章 处理assets)
resources资源可以存储声音文件,但当处理多个音乐文件时,效率会很低. assets可以被看作随应用打包的微型文件系统,支持任意层次的文件目录结构.类似游戏这样需要加载大量图片和声音资源的应用通 ...
- C++扬帆远航——12(抓小偷)
/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:zhaoxiaotou.cpp * 作者:常轩 * 微信公众号: ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(六)Electron打包,同时构建客户端和web端
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- Internet上的音频/视频概述
Internet上的音频/视频概述 计算机网络最初是为传送数据信息设计的.因特网 IP 层提供的"尽最大努力交付"服务,以及每一个分组独立交付的策略,对传送数据信息也是很合适的. ...