当前位置: 首页 > news >正文

新浪网站源代码电商网站建设济南建网站

新浪网站源代码,电商网站建设济南建网站,功能型网页设计,wordpress登陆post文章目录 1、Garbage Collection2、方法区的回收3、堆对象回收4、引用计数法5、可达性分析算法6、查看GC Root对象 1、Garbage Collection C/C,无自动回收机制,对象不用时需要手动释放,否则积累导致内存泄漏: Java、C#、Python、…

文章目录

  • 1、Garbage Collection
  • 2、方法区的回收
  • 3、堆对象回收
  • 4、引用计数法
  • 5、可达性分析算法
  • 6、查看GC Root对象

在这里插入图片描述

1、Garbage Collection

C/C++,无自动回收机制,对象不用时需要手动释放,否则积累导致内存泄漏:

在这里插入图片描述
Java、C#、Python、Go等支持对不再使用的对象进行回收:

在这里插入图片描述

Java引入GC机制,主要负责对上的内存进行回收,简化了对象的释放,但同时也丧失了回收的及时性,因为回收操作不再又开发者做了。

在这里插入图片描述

线程不共享的部分,随着线程的创建而创建,随着线程的死亡而销毁,不会发生内存泄漏。且栈里的每个栈帧,在方法执行完后直接弹栈并释放内存,都不用等到线程死亡。

在这里插入图片描述
添加JVM参数:

-verbose:gc

可查看回收日志

2、方法区的回收

即回收不再使用的类,对应类生命周期里的卸载阶段。类A被卸载,需同时满足

  • 类的所有实例对象全被回收,堆中再无它的对象或子类的对象
  • 加载类A的类加载器被回收
  • 类A的java.lang.Class对象没有任何地方在引用
URLClassLoader loader = new URLClassLoader(new URL[] {new URL("file:D:\\lib\\")});
Class<?> clazz = loader.loadClass("com.plat.domain.A");
Object a = clazz.newInstance();
a = null;
clazz = null;
loader = null;

Demo代码如下,循环体中创建的变量,一轮结束后自动没用,不用重复 o = null

public class Demo2 {public static void main(String[] args) {try {ArrayList<Class<?>> classes = new ArrayList<>();ArrayList<ClassLoader> loaders = new ArrayList<>();ArrayList<Object> objs = new ArrayList<>();while (true) {//URLClassLoader classLoader = new URLClassLoader(new URL[]{new URL("file:D:\\tmp\\")});BreakClassLoader1 classLoader = new BreakClassLoader1();  //自定义类加载器classLoader.setBasePath("D:\\springboot\\jvm\\target\\classes\\");Class<?> clazz = classLoader.loadClass("com.plat.app.Demo1");Object o = clazz.newInstance();//循环体中创建的变量,一轮结束后自动没用,不用重复 o = null 、clazz = null 、classLoader = null/*打开这里的任意一句,就有一个对应的对象被引用,类卸载就会失败objs.add(o);loaders.add(classLoader);classes.add(clazz);*///手动触发一次垃圾回收,但不是立即//是对JVM的请求,具体是否回收JVM自行决断System.gc();}} catch (Exception e) {e.printStackTrace();}}}public class Demo1  {static{System.out.println("类A被加载");}
}

添加JVM参数:

//运行过程中打印类的加载信息
-XX:+TraceClassLoading   //类被卸载的时候打印一句日志
-XX:+TraceClassUnloading  

运行:

在这里插入图片描述

但其实类的卸载不常见,因为自定义类的累加载器对象还在,热部署中用的多:

在这里插入图片描述

3、堆对象回收

Java对象能否被回收,得看它是否还在被引用。

在这里插入图片描述
demo = null后,再无对Demo对象的引用,可回收。

在这里插入图片描述
执行:

a1 = null
b1 = null

A、B对象被回收,因为方法中无法再通过引用访问到这两个对象了。总之,判断方式:

  • 引用计数法
  • 可达性分析

4、引用计数法

即为每个对象维护一个计数器,对象被引用就+1,置为null了就-1,JVM扫描堆内存,发现数值为0则回收

A a1 = new A();
B b1 = new B():
a1.SetB(b1);

则A的计数器为1,B的计数器为2
在这里插入图片描述
优点:

  • 简单
  • 也是C++的智能指针的实现基础

缺点:

  • +1,-1的维护损耗性能
  • 循环引用时,导致计数器至少为1,对象无法被回收,内存泄漏

在这里插入图片描述

5、可达性分析算法

普通对象A,经一个引用链可以到达GC Root对象,则A不可被回收

在这里插入图片描述

  • GC Root对象即垃圾回收的根对象
  • GC Root对象一般不会被回收,且JVM持有GC Root对象的List列表

GC Root对象包括:

  • 线程对象Thread(引用线程栈帧中的方法参数、局部变量等)

在这里插入图片描述

  • 系统类加载器加载的java.lang.Class对象(引用类中的静态变量)

在这里插入图片描述

  • 监视器对象(引用synchronized锁的对象)

在这里插入图片描述

  • native本地方法调用时使用的全局对象

6、查看GC Root对象

步骤:

  • 阿尔萨斯的heapdump指令,保存堆内存快照到本地磁盘
heapdump d:/tmp/test.hprof
  • 使用MAT工具打开堆内存快照文件

在这里插入图片描述

http://www.yayakq.cn/news/176925/

相关文章:

  • 做物业管理的企业网站无锡网站开发公司
  • 网站建设哪里可以学宁波网站制作公司费用价格
  • 建设购物网站的方案深圳外贸建站模版
  • 郑州做营销型网站营销网站都有哪些
  • 网站建设方案书范本秦皇岛seo
  • 建立网站最先进的互联网技术有哪些wordpress主题图片路径设置
  • 常熟网站建设icp备案北京网站设计我选刻
  • 单页网站多钱网络空间安全和信息安全的区别
  • 一般建站公司用什么cms做公司网站要营业执照吗
  • 做电脑网站网站建设流程步骤
  • 房屋租赁网站开发背景做外贸的专业网站
  • 医疗网站有哪些wordpress ajax 插件
  • 网络推广方法有哪几种中山网络推广seo专业
  • 安徽和县住房城乡建设局网站如何在万网建设网站
  • jsp怎么做网站的删除郑州效果图设计工作室
  • 建设一个充电站需要多少钱哈尔滨网站建设网络公司
  • 雏鸟app网站推广jrs直播网站谁做的
  • 金安区住房和城乡建设局网站全网关键词优化公司哪家好
  • 如何修复网站中的死链dreamwear网页制作
  • 作品集制作网站博山网站seo
  • 江门专业网站建设价格广东华电建设股份有限公司网站
  • 网站建设运维方案移动互联网开发技术就业前景
  • 南宁网站建设托管白城学做网站
  • 做徒步网站怎么样花木网站建设
  • 代做毕业设计网站 道路桥梁杭州做美妆的网站
  • 做网站用图片算侵犯著作权吗重庆的网站设计公司
  • 国外教做蛋糕的网站淘宝客网站开发服务商
  • 想开个网站不知怎样做wordpress编辑器排行
  • 网站广告的图片怎么做网络营销的起源
  • 房产如何做网站西安营销策划推广公司