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垃圾回收机制和内存分配的更多相关文章

  1. Java垃圾回收机制和内存分配

    收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现 自动内存管理解决的是:给对象分配内存 以及 回收分配给对象的内存 为什么我们要了解学习 GC 与内存分配呢? 在 JVM 自动内存管理机制的 ...

  2. JVM架构和GC垃圾回收机制

    深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...

  3. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  4. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  5. 面试官,不要再问我“Java GC垃圾回收机制”了

    Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...

  6. GC垃圾回收机制详解

    JVM堆相关知识    为什么先说JVM堆?  JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象.这些对象的建立方式就是那些new一类的操作 ...

  7. JS基础-垃圾回收机制与内存泄漏的优化

    [V8引擎]浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略 垃圾回收机制 如何判断回收内容 如何确定哪些内存需要回收,哪些内存不需要回收,这是垃圾回收期需要解决的最基本问题.我们可以这样 ...

  8. 乐字节Java|GC垃圾回收机制、package和import

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  9. 通俗易懂.NET GC垃圾回收机制(适用于小白面试,大牛勿喷)

    情景:你接到xx公司面试邀请,你怀着激动忐忑的心坐在对方公司会议室,想着等会的技术面试.技术总监此时走来,与你简单交谈后.... 技术:你对GC垃圾回收机制了解的怎么样? 你:还行,有简单了解过. 技 ...

随机推荐

  1. 20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第七周学习总结 教材学习内容总结 概述 二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,而父结点又小于或 ...

  2. mr实现pagerank

    PageRank计算什么是pagerankPageRank是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度.是Google创始人拉里·佩奇和谢尔盖·布林于1997 ...

  3. 如何将一个excel表格的数据匹配到另一个表中

    我们在操作excel表的时,有时需要将一个excel表中的数据匹配到另一个表中,那么就需要用到VLOOKUP函数,VLOOKUP函数是Excel中的一个纵向查找函数,VLOOKUP是按列查找,最终返回 ...

  4. java多线程系列 目录

    Java多线程系列1 线程创建以及状态切换    Java多线程系列2 线程常见方法介绍    Java多线程系列3 synchronized 关键词    Java多线程系列4 线程交互(wait和 ...

  5. AX_SysTableBrowser

    sysTableBrowser sysTableBrowser = new sysTableBrowser();  ;  sysTableBrowser.setAllowEdit(true);  sy ...

  6. 使用C#重写网上的60行 Javascript 俄罗斯方块源码 (带注释)

    在很久很久以前,就已经看过 60行Js的俄罗斯方块源码.无奈当时能力不够看明白,当时觉得就是个神作. 现在总算有空再看了,顺便用c#实现一遍(超过60行),顺道熟悉下Js API. 网上其他博客也有分 ...

  7. 【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

    [转][完全开源]百度地图Web service API C#.NET版,带地图显示控件.导航控件.POI查找控件 目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET ...

  8. 如何方便的在windows测试python程序

    听说python的网页抓取模块很强大,我想试试看看能给我的网络优化工作带来什么大的帮助,于是跟随廖雪峰老师开始学习python(地址查看),因为我用的是window系统,这就给程序的测试带来了很多麻烦 ...

  9. centos7搭建Cisco上网方式

    1.下载脚本 wget https://git.io/vpnsetup-centos -O vpnsetup.sh 2.修改 vi vpnsetup.sh 替换为你自己的值: YOUR_IPSEC_P ...

  10. WPF中的数据绑定

    WPF中的数据绑定 基础概念 System.Windows.Data.Binding,他会把两个对象(UI对象与UI对象之间,UI对象与.NET数据对象之间)按照指定的方式粘合在一起,并在他们之间建立 ...