前言 Java 是门面向对象的开发语言,那么我们自己编写的 Java 类生成的对象是什么样的?它肯定保存在虚拟机的内存中,但它以怎样的结构来保存的呢?带着疑问往下看看。 关于Klass Java 层的开发可能不太熟悉 K…
分类:JVM
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 大牛们是如何设计的。 缓存 本次主要讨论缓存。 缓存在日常…
从Java到JVM到OS线程的优先级
前言 Java 的线程的调度机制由 JVM 实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”。 优先级别 Java 把线程优先级分成10个级别,线程被创建时如…
JVM加载TimeZone读取文件优先级实战分析
问题现象 前几天线上新上线一个Kafka Java Consumer程序,出现一个异常的问题,那就通过查看日志,数据写入到了Elasticsearch索引里面,但是前端查询不到数据。 最终通过和开发一起定位,是因为我们业…
Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty。 但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚。 本文就来从历史源头说道说道。 传统 IO 在 Netty 以…
JVM扫盲-2:虚拟机执行子系统
1、类文件结构 Java虚拟机只与Class文件相关联,它规定了Class文件应该具有的格式,而不论该文件是由什么语言编写并编译而来。所以,任何语言只要能够最终编译成符合Java虚拟机要求的Class文件,就可以运行在J…
从JDK源码看String(下)
lastIndexOf方法 该方法用于返回指定字符在此字符串中最后一次出现处的索引,有多种方法参数。可传入 int 类型,也可传入 String 类型,另外还能传入开始位置。根据编码的不同分别用 Latin1 和 UTF…
从Java到JVM到OS线程睡眠
前言 Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过Thread.sleep使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么。 简单例子 以下是一个简单的例子,使主线程睡眠5秒钟。 publ…
向JVM注册本地方法是怎么实现的
前言 Java 中我们经常会遇到要调用本地方法的情况,而且 Java 核心库中的很多类也大量使用了本地方法,使用 JNI 时本地函数需要按照约定好的格式进行命名,如果不想写长长的函数名则需要将方法注册到 JVM 中,这里…
深入理解volatile
在理解volatile之前,我们先来看下CPU的工作模式: 处理器这种工作产生的问题: 1、所有的变量在处理器运算期间都是变量对应值的一个副本,其它处理器无法感知其对变量的操作。 2、处理器为了高效利用寄存器而对指令的重…