前言 Java 语言上定义了不同的数据类型,比如有基础类型int、double等等,还有所有类的父类Object等,这些都是 Java 层面的类型,而使用本地方法的处理过程需要有它们对应的类型。 大概的流程 Java 层…
标签:JVM
深入谈谈String.intern()在JVM的实现
前言 String 类的intern方法可能大家比较少用也比较陌生,虽然实际项目中并不太建议使用intern方法,可以在 Java 层来实现类似的池,但我们还是要知道它的原理机制不是。 关于intern方法 通过该方法可…
悲观的并发策略——synchronized互斥锁
互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。 对于Java开发人员,最熟悉的肯定就是用synchroniz…
Java中的Type类型详解
图片来自必应 在Java中,泛型与反射是两个重要的概念,我们几乎能够经常的使用到它们。而谈起Type,如果有人还比较陌生的话 ,那么说起一个它的直接实现类——Class的话,大家都应该明白了。Type是Java语言中所有…
Java线程的CPU时间片
Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况: 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或…
Java线程的调度
线程调度一般指的是系统为线程分配处理器使用权的过程,这个过程会产生上下文切换,即操作系统的CPU利用时间片轮转的方式给每个任务分配一定的执行时间,然后把当前任务状态保存下来,接着加载下一任务的状态并执行,它是一个状态保存…
三大性质总结:原子性、可见性以及有序性
1. 三大性质简介 在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchron…
Java中atomic包中的原子操作类总结
1. 原子操作类介绍 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制…
Java对象在JVM中长啥样
前言 Java 是门面向对象的开发语言,那么我们自己编写的 Java 类生成的对象是什么样的?它肯定保存在虚拟机的内存中,但它以怎样的结构来保存的呢?带着疑问往下看看。 关于Klass Java 层的开发可能不太熟悉 K…
JVM-垃圾收集入门
垃圾收集概述 对Java程序员而言不需要显式地管理对象的生命周期:我们可以在需要时创建对象,对象不再被使用时,会被JVM在后台自动进行回收。那为什么我们还要去了解GC和内存分配? 答案很简单:当需要排查各种内存溢出、内存…
从原理分析Kotlin的延迟初始化: lateinit var和by lazy
Koltin中属性在声明的同时也要求要被初始化,否则会报错。 例如以下代码: private var name0: String //报错 private var name1: String = "xiaoming" /…
Guava 源码分析(Cache 原理)
前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的。 缓存 本次主要讨论缓存。 缓存在日常…