一:JVM运行时内存 1.1:如何判断一个对象生存状态 1.1.1:引用计数法 在其内部维护着一个计数器,当只要还有对象引用当前对象,计数器就加1,如果不为0,就证明该对象依然存活,如果为0,则证明没有对象引用该对象,那么该对象就是已经死了。但是会存在问题是存在互相引用,但是又是垃圾的对象的情况 1 ...
分类:
其他好文 时间:
2020-05-05 09:13:36
阅读次数:
70
1 #变量标注 别名 相等性 2 #变量是对象的标识,相当于对象的标签,而不是将对象装入变量的盒子,一个对象可以有多个标签。 3 list1 = [1, 2, 3, [4, 5, 6]] 4 print(id(list1[1]), id(2)) 5 #2、两个变量名相互赋值不会产生新对象,只是将赋值 ...
分类:
其他好文 时间:
2020-04-28 00:19:31
阅读次数:
47
本文参考 本篇文章参考自《Effective Java》第三版第七条"Eliminate obsolete object references" Memory leaks in garbage-collected languages (more properly known as unintenti ...
分类:
编程语言 时间:
2020-04-25 16:55:59
阅读次数:
73
数组引用,是 Lambda 针对数组的一种写法! 一、Lambda 表达式 ) 1、什么是 Lambda 表达式? 2、基础语法: 3、举例: 4、核心函数式接口 5、方法引用 6、构造器引用 7、数组引用 二、Stream API 1、什么是 Stream API? 2、Stream 操作步骤 3 ...
分类:
编程语言 时间:
2020-04-23 09:14:29
阅读次数:
103
1.AtomicReference AtomicReference类提供了一个可以原子读写的对象引用变量。原子意味着尝试更改AtomicReference的多个线程(例如:比较和交换操作),不会是AtomicReference最终达到不一致的效果。  
分类:
其他好文 时间:
2020-04-22 11:41:18
阅读次数:
66
前言 对于python来说,一切皆为对象,所有的变量赋值都遵循着对象引用机制。程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量;计算完成后,再将结果输出到永久性存储器中。如果数据量过大,内存空间管理不善就很容易出现 OOM(out of memory),俗称爆内存,程序可能 ...
分类:
编程语言 时间:
2020-04-20 16:04:37
阅读次数:
71
1.JVM Java虚拟机(JVM)是运行Java字节码的(.class)。-->高效;可移植 Java程序从源代码到运行一般有以下3步: .java文件(源代码) -->(JDK中的javac编译) --> .class文件(JVM可理解的Java字节) --> (JVM) -->机器可执行的二进 ...
分类:
编程语言 时间:
2020-04-10 00:26:42
阅读次数:
80
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2020-04-08 12:10:18
阅读次数:
75
概述 引用计数法又是什么鬼呢? 顾名思义, 对对象的引用进行计数. 通过记录每个对象被引用的次数, 来确定这个对象是否可以被回收. 实现 首先, 对对象的引用数量进行管理, 什么时候会更新呢? 1. 创建对象: 新建一个对象(对这个新的对象引用数量+1) 2. 更新指针: 将一个指向A对象的指针重新 ...
分类:
编程语言 时间:
2020-04-05 20:42:09
阅读次数:
89
1、发现无用对象 引用计数 被应用时,计数器++,通过计数器判断是否被引用(循环引用) 把引用关系作为一张图,搜索根。(建图或者建树) 2、回收无用对象 通用的垃圾分代回收机制 将对象分为年轻代,年老代,持久代 jvm划分为将堆划分为: Eden :新建对象先放至eden,满了就触发垃圾回收(min ...
分类:
编程语言 时间:
2020-04-05 11:50:13
阅读次数:
86