捉虫大师 捉虫大师
2年前
实现一个比LongAdder更高性能的计数器有多难
本文已收录https://github.com/lkxiaolou/lkxiaolou欢迎star。强悍的LongAdderLongAdder是jdk8引入的适用于统计场景的线程安全的计数器。在此之前,实现一款线程安全的计数器要么加锁,要么使用AtomicLong,加锁性能必然很差,AtomicLong性能要好很多,但是在高并发、多线程下,也显得吃力。
Wesley13 Wesley13
2年前
java 面试知识点笔记(三)底层知识 jvm 内存模型 下篇
!(https://oscimg.oschina.net/oscnet/80e622a3176257be76a596cebb5088c3b92.jpg)上一篇讲完了java内存模型中线程私有部分(程序计数器、虚拟机栈、本地方法栈),这篇讲下所有线程公有部分问:元空间(MetaSpace)和永久代(PermGen)的区别?元
九路 九路
3年前
4 Java 如何判定是否存活或者死亡
在堆中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象之中哪些还活着,哪些对象已经死去.判断对象是否已经死亡有以下几种算法:引用计数法算法定义:给对象中添加一个引用计数器,当有一个地方引用时,计数器加1,引用失效时,就减1,当对象的引用计数器为0时,对象就是不可再被使用的.特点:JAVA虚拟机中很少使用这
Wesley13 Wesley13
2年前
java之jvm
1.JVM内存模型_线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区_回答以上问题是需回答两个要点:1\.各部分功能2\.是否是线程共享2.JMM与内存可见性JMM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要
Wesley13 Wesley13
2年前
java GC算法 垃圾收集器
GC算法垃圾收集器概述垃圾收集GarbageCollection通常被称为“GC”,它诞生于1960年MIT的Lisp语言,经过半个多世纪,目前已经十分成熟了。jvm中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方
Stella981 Stella981
2年前
JVM内存模型和类加载机制
JVM内存模型Java代码是运行在Java虚拟机(JVM)上的,Java虚拟机通过解释执行(解释器)或编译执行(编译器)来完成。Java内存模型分为5个部分:方法区(MethodArea),Java堆(Heap),Java栈(VMStack),本地方法栈(NativeMethodStack),程序计数器(PC寄存器)!(ht
Wesley13 Wesley13
2年前
HAL库 TIM计数器及中断开启过程
1、初始化TIM基本计数器参数voidMX_TIM2_Init(void){TIM_ClockConfigTypeDefsClockSourceConfig{0};TIM_MasterConfigTypeDefsMasterConfig{0};htim2.Instan
Stella981 Stella981
2年前
JVM笔记整理
不对之处还望指正。垃圾回收1\.如何判断对象是垃圾对象?引用计数法在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值1,当引用失效时,则值1.此方式不能解决循环引用的问题。验证添加gc日志,\_005GC.javaverbose:gc
Wesley13 Wesley13
2年前
Java中多线程并发体系知识点汇总
一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进
Stella981 Stella981
2年前
JVM03
前言今天来学习下与JVM垃圾收集机制相关的一些基本概念。如何判断对象是否存活垃圾收集器首要的任务的任务就是判断哪些对象是存活的,哪些对象已经死去了(这里死去的意思是对象不再被任何途径使用)。引用计数算法引用计数算法是在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器