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垃圾回收机制了解的怎么样? 你:还行,有简单了解过. 技 ...
随机推荐
- centos 7 安装vscode
网上很多写的安装,会遇到一个问题,就是无法启动: sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh ...
- 对js原型及构造函数的相关理解
一.js中的原型创建(声明)一个函数,浏览器在内存中会创建一个对象.每个函数都默认会有一个属性prototype指向了这个对象,就是说prototype的属性的值就是这个对象.此对象就是该函数的原型对 ...
- docker构建镜像
Docker 提供了两种构建镜像的方法: docker commit 命令Dockerfile 构建文件 示例: Dockerfile FROM golang:1.7.5 #基础镜像 RUN apt- ...
- Laravel 中使用 JWT 认证的 Restful API
Laravel 中使用 JWT 认证的 Restful API 5天前/ 678 / 3 / 更新于 3天前 在此文章中,我们将学习如何使用 JWT 身份验证在 Laravel 中构建 r ...
- [Hadoop]Hadoop章2 HDFS原理及读写过程
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统. HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② ...
- Numpy and Matplotlib
Numpy介绍 编辑 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数 ...
- 转载 linux基本操作
转载地址 https://segmentfault.com/a/1190000014840829 前言 只有光头才能变强 这个学期开了Linux的课程了,授课的老师也是比较负责任的一位.总的来说也算是 ...
- [记录]MySQL 查询无法导出到文件
很多时候我们需要将数据导出到 xls文件, 然后交给数据分析师分析. 而这个查询数据+导出的动作,理应使用一个有只读权限的用户使用. 但查询某表时: select * from table ,此用户可 ...
- vue中使用axios
1.结合vue-axios使用 vue-axios是按照vue插件的方式去写的,那么结合vue-axios就可以使用Vue.use()这个方法import axios from 'axios' imp ...
- docker服务各个模块
docker容器官网:https://hub.docker.com/ 一.centos7.4中指定安装docker版本 1)默认yum源安装的docker版本为docker1.3.性能偏低,不支持k8 ...