前言 在上一节的学习中,已经了解到了关于JVM 内存相关的内容,比如JVM 内存的划分,以及JDK8当中对于元空间的定义,最后就是字符串常量池等基本概念以及容易混淆的内容,我们都已经做过一次总结了.不懂的小伙伴再复习复习~ GC 对于GC 这个名词我相信对于学习JAVA的同学,还是多少有了解的.GC 在HotSpot 虚拟机内的具体实现,使我们这节需要了解和学习的地方,而垃圾回收器GC 其工作的最主要的两个场所就是: 堆 也就是最大的线程共享区域 方法区 确定垃圾的方式 引用计数法 引用计数法,…
写在最前 从毕业到现在已经过去了差不多一年的时间,工作还算顺利,但总是离不开CRUD ,我觉得这样下去肯定是不行的,温水煮青蛙,势必有一天,会昏昏沉沉的迷失在温水里.所以,需要将之前学习JAVA 当中一些中高级部分的知识需要进行学习和记录,并将其整理博客,一起成长,一起努力. JVM JAVA虚拟机在运行的时候,会给所有的变量.以及实例对象等分配内存区域,当然这一块内存区域是在Java 虚拟机上分配的,虚拟机的内存. 这里先来了解一个区别,就是JVM 与 Hotspot JVM 可以理解为是一种…
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略.        一.finailize()方法               在介绍GC策略前,先介绍下GC中的finailize方法.当对象没有任何引用的时候,通常这个对象会被回收掉,但如果我们想在对象被回收前进行一些操作,比如关闭一些资源,或者让这个对象复活,不让他被回收怎么办?这时候就要用到finailize方法了…
线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本运行单元,说白了就是Java运行程序. 1.2什么是线程? 进程中独立运行的子任务就是一个线程 1.3什么是多线程(异步)? 多线程是多个子任务进行交替执行.例如:有A.B两个任务,A先执行,再执行B,如果是单线程执行,则需要等A先执行完之后才能够执行B:而多线程的话是A与B来回交换执行.这样可以让…
一.标记-清除算法 算法:分为标记和清除两个阶段,首先标记出所有需要回收的对象,再对标记对象进行回收. 不足之处:效率不高,会产生大量不连续内存碎片,导致下次分配较大内存时,若内存不足不得不触发垃圾回收操作. 此算法为最基础算法,其他算法都是在此算法基础上改进而得到的. 二.复制算法 算法:将可用内存按容量大小划分为两块,每次只使用其中一块,当这块用完之后,就将还存活的对象复制到另外一块上面,再把已使用过的那块清理掉. 缺点:这种算法的代价就是将内存缩小为了原来的一半. 此种算法常运用于回收新生…
垃圾回收机制 垃圾回收机制,是保证脚本能长时间运行的重要机制 JS具有自动垃圾收集机制,也就是说执行环境会负责管理代码执行过程中使用的内存 与一些偏底层的语言(c.c++)不同,我们不需要手工地去管理内存的使用情况 因为JS替我们完成了需要内存的分配,以及无用内存的回收,然后释放其占用的内存. 其原理其实很简单,就是找出那些不再使用的内存释放掉就行,所以垃圾收集器会按照固定时间间隔来执行该操作 垃圾回收是针对局部变量的,因为全局变量会在浏览器关闭后自动释放内存,而局部变量不同,其只会在函数执行期…
JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(GC日志分析示例) package com.hs.jvm; import java.sql.Time; import java.sql.Timestamp; import java.text.SimpleDateFormat; public class Test { public Object instance…
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们仍需要了解JVM垃圾回收机制,以便在Java程序运行时发生错误的时候可以快速定位,并解决. 内存模型图 线程共享区: 方法区(Method Area):线程共享,存储被JVM加载的类信息.常量.静态变量.编译器编译后的代码等数据. Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾…
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成图形,所以只要你有耐心,仔细,认真,并发挥你的想象力,这一章之后你会充满自信.当然,不是说看完本章,就对jvm了解了,jvm要学习的知识实在是非常的多.在你看完本节之后,后续我们还会来学jvm的细节,但是如果你在学习完本节的前提下去学习,再学习其他jvm的细节会事半功倍. 为了让你每一个知识点都有迹…
为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需要排查各种内存溢出.内存泄漏时,当垃圾收集器成为系统达到更高并发量的瓶颈时,我们就需要对这些"自动化"的技术实施必要的监控和调节. 回收哪些对象 我们知道在Java内存运行时数据区域中,虚拟机栈.本地方法栈和程序计数器是线程隔离的数据区,随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退…