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垃圾回收机制了解的怎么样? 你:还行,有简单了解过. 技 ...
随机推荐
- docker--容器和镜像的导入导出及部署
一.镜像导出 save 1.查看镜像 docker images 2.导出镜像 docker save -o test.tar image_name 或 docker save image_name ...
- shell速查
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell.bash由Brian Fox和Chet Ramey共同完成,是Bourn ...
- SqlServer2012,设置指定数据库对指定用户开放权限
REVOKE VIEW ANY DATABASE TO [public] --这个是取消数据库公开的权限,也就是除了sa角色外任何人都不能查看数据库 -- 现在用sa用户登录Use [要开放权限的数据 ...
- Spring Boot 启动(四) EnvironmentPostProcessor
Spring Boot 启动(四) EnvironmentPostProcessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698. ...
- [ES]elasticsearch章5 ES的分词(二)
Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...
- playframework 一步一步来 之 日志 (三)
在paly中自定义配置logback,也很简单,只需在conf folder下添一个application-logger.xml或者logger.xml就行了.(出处:"If you cre ...
- Anaconda的安装及使用
总结的很清楚,做个记录. http://python.jobbole.com/86236/
- day31并发
以后你为之奋斗的两点: 提高cpu的利用率 提高用户的体验 1.纯概念/纯方法 操作系统的发展历程 #主要的人机矛盾是什么:CPU的使用率 #输入\输出数据和CPU计算没有关系 #操作系统是怎么进化 ...
- kali配置python3的开发环境
最近打算学习一下python3,毕竟不会写脚本的程序员,不是一个好的安全测试人员! 对于我来说,python的大部分应用都是在linux上,而kali是我唯一一个有图形化操作界面的linux系统 所以 ...
- Win7 VS2017编译PBR渲染引擎google filament
按照官方说明 https://github.com/google/filament 前置工具包 Windows 10 SDKVisual Studio 2017Clang 6Python 3.7Git ...