JVM和GC垃圾回收机制和内存分配
JVM运行期间
线程共享 线程私有
线程共享: 方法区 堆
方法区:存放可以共享数据,静态常量,类的共有方法属性字段等,可以共享的存在方法区。
堆:存放class对象 。
线程私有:本地方法栈 虚拟机栈 程序计数器
本地方法栈:存储有关键字native的对象
虚拟机栈:存储引用对象
程序计数器:假如两个线程从0执行到100,先是线程A抢到了cpu资源,他从0执行到了15,cpu重新分配资源,
线程B抢到了从0执行到了10,下一次资源线程A抢到他从15执行到了20。那这个线程是怎么延续上一次的操作继续执行的呢? 这就是用到了程序计数器去计算。
类的加载机制
1.加载:将.class字节码文件加载到内存中,并在堆中生成了一个对象。作为方法区的入口。
2.连接:判断加载的时候有没有出现过异常,类的验证,类的准备,类的解析。
3.初始化/实例化:就是实例化的时候, 创建对象的时候。实例化对象分为:类的主动引用,和类的被动引用。
4.运行:写代码的期间。
5.结束:程序运行结束。
GC垃圾回收机制
01.基本概念
c语言中,垃圾回收是程序员手动控制!
可能会出现的问题:
没有及时清除不用的对象
误操作,清除了系统类。
在java的运行过程中,java虚拟机提供了一个垃圾回收线程。
他负责自动回收程序中不在使用的对象,我们称作垃圾回收机制(Garbage Collection)
02.特点
减轻了程序员的压力
防止误操作导致程序崩溃
只有在一个对象没有引用的时候,才会回收
程序无法控制垃圾回收器进行工作
当GC在回收无用的对象的使用,首先会调用一次finalize()
如果调用成功,则对象不回收,但是,这个方法只有一次机会!
03.对象的状态
可触及状态:对象还有引用
不可触及状态:对象调用finalize(),如果没有还原成可触及状态。
可复活状态:对象没有引用,没有调用finalize()
GC回收的不是对象,而是对象在内存中的空间!!
内存分配区域
分代分配,分代回收
01.新生代
新生代分为两部分 绝大部分放进eden区 eden占20%
在eden区满的时候,会把区里的对象放到survivor区 survivor区占80% survivor区分为两个区域一个survivor0区,一个survivor1区。
这两个区必须有一个是空的, 加入survivor0区满了会把对象转移到survivor1区中,把死亡的对象清除。survivor1区满了转移到survivor0区。
当一个对象在新生代区域存活已久,并且没有清空,则会被放到老年代中。
02.老生代
内存空间远远大于新生代!
如果创建的对象eden区放不下,会直接放进老年代!
在老年代执行GC我们称为 Full GC(Major GC)
当老年代内存快满的时候,执行Full GC
03.永久代
所有类的实例对象(class对象的引用)已经被回收
加载类的classloader已经回收了
JVM和GC垃圾回收机制和内存分配的更多相关文章
- Java垃圾回收机制和内存分配
收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现 自动内存管理解决的是:给对象分配内存 以及 回收分配给对象的内存 为什么我们要了解学习 GC 与内存分配呢? 在 JVM 自动内存管理机制的 ...
- JVM架构和GC垃圾回收机制
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略
V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...
- 面试官,不要再问我“Java GC垃圾回收机制”了
Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...
- GC垃圾回收机制详解
JVM堆相关知识 为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象.这些对象的建立方式就是那些new一类的操作 ...
- JS基础-垃圾回收机制与内存泄漏的优化
[V8引擎]浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略 垃圾回收机制 如何判断回收内容 如何确定哪些内存需要回收,哪些内存不需要回收,这是垃圾回收期需要解决的最基本问题.我们可以这样 ...
- 乐字节Java|GC垃圾回收机制、package和import
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...
- 通俗易懂.NET GC垃圾回收机制(适用于小白面试,大牛勿喷)
情景:你接到xx公司面试邀请,你怀着激动忐忑的心坐在对方公司会议室,想着等会的技术面试.技术总监此时走来,与你简单交谈后.... 技术:你对GC垃圾回收机制了解的怎么样? 你:还行,有简单了解过. 技 ...
随机推荐
- 怎么把微信里的文件发到QQ?
对于如何将微信里的文件发到QQ这个问题,首先要看是在手机中操作还是在电脑上操作,针对不同的发送方式逐一介绍如下: 一.从手机微信发送文件到QQ 1.在手机微信中找到需要发送的文件打开,点击右上角竖排的 ...
- Java 日志体系(二)jcl 和 slf4j
Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...
- 结巴分词的stopword.txt
1. read the stop words to a list: stopwords = [line.strip() for line in open('d:/stopword.txt','r'). ...
- 关于Visual Studio调试C/C++,JS,PHP,JAVA,Python等语言的方法
我在开始接触vs code后,确实对它的高颜值和小巧灵活而着迷,但是有一个非常现实的问题,相对于vs来说,vscode是一个代码编辑器,而不是一个IDE,在代码编译运行上存在着极大的问题,尤其是开始编 ...
- Scrum冲刺阶段6
成员今日完成的任务 人员 任务 何承华 学习后端设计 陈宇 后端设计 丁培辉 学习后端设计 温志铭 信息界面设计 杨宇潇 信息界面界面设计 张主强 服务器构建学习 成员遇到的问题 人员 问题 何承华 ...
- 从文件中读取数组数据————Java
自己总结一下Java文件的读取类似数组数据的方法,自己可以快速查看. 一.规整化数据: 对于数组数据是一一对应的情况 ArrayList<String> arrayList = new A ...
- beego笔记
beego学习笔记一:创建第一个beego Web项目 Go语言beego框架快速搭建体验五分钟讲解01 beego框架图文简介五分钟讲解02 beego框架图文简介五分钟讲解03-go语言简单方式操 ...
- 大数据项目测试<二>项目的测试工作
大数据的测试工作: 1.模块的单独测试 2.模块间的联调测试 3.系统的性能测试:内存泄露.磁盘占用.计算效率 4.数据验证(核心) 下面对各个模块的测试工作进行单独讲解. 0. 功能测试 1. 性能 ...
- metasploit渗透测试魔鬼训练营环境
metasploitable winxpensp2 owasp_broken_web_apps win2k3 metasploitable 链接:https://pan.baidu.com/s/1oZ ...
- C++智能指针 auto_ptr、shared_ptr、weak_ptr和unique_ptr
手写代码是理解C++的最好办法,以几个例子说明C++四个智能指针的用法,转载请注明出处. 一.auto_ptr auto_ptr这是C++98标准下的智能指针,现在常常已经被C++标准的其他智能指针取 ...