Java字节码入门

字节码是Java程序员走向进阶的必经之路。如果说一切业务问题在源码面前没有秘密,那么字节码就是带你走到秘密的背后,一窥Java底层的奥义。 如何获取字节码? JVM装载类的方式有很多,最常见的做法就是利用.class文件,这是根据.java文件编译得到的。由于编译过程的存在,所以.java文件所表示的内容在.class可能发生变化。你可以通过javap -v xxx.class命令来获取指定.cl …

DirectByteBuffer简介

堆外内存是不受GC控制的内存空间,相对来说灵活度更高。大部分Java开发不会直接用到堆外内存,但对一些框架应用(如Kafka, Netty)堆外内存是必须牢牢掌控的一份宝藏,因为它最起码具有以下这些好处: 空间不受堆大小限制(但可通过-XX:MaxDirectMemorySize参数控制) 可以自定义内存分配和回收策略,不受JVM gc约束 可以使用零拷贝等高级特性,这在网络IO是极大的优势 构造 …

[译]Java垃圾回收器及对象引用

原文地址:https://dzone.com/articles/java-garbage-collector-and-reference-objects 我们即将讨论Java中的垃圾回收概念 和 回收中会用到到几种对象引用类型。 在本文中,我们将讨论Java中的一些内存管理概念,重点是垃圾收集器与不同对象引用类型之间的交互。 这不是简单的入门文章,你应该预先了解Java Heap和GC的基础知识。 …

深入Java并发包(4)-java Future 探秘

This entry is part 4 of 4 in the series 深入Java并发包

在java多线程开发中,最简单的实现方案是直接创建一个Thread对象,通过Thread.start()方法启动一个线程执行异步任务。像下面这样的一段代码你应该非常熟悉。 但是这样创建的子线程任务有非常大的局限性,首当其冲就是子线程无法跟父线程通信。比如父线程需要等待子线程结束后才结束这样的场景。你可能会想出共享变量的方式来实现线程通信,像下面这样的代码你肯定写过: 只是这种土方法的局限性也很强, …

深入Java并发包(2) – Java说要有并发包, 于是有了AQS

This entry is part 2 of 4 in the series 深入Java并发包

AQS提供了框架,提供了许多可以选择性实现的方法。将他们组合起来,便成了各种我们常用的锁/队列/同步器。本文以ReentrantLock和CountDownLatch为切入口扒一扒源码, 讲一讲思路。 AQS为何物? AQS提供的并发控制框架, 本质上就是将多个线程对竞争对象的操作变成有序的队列. 这从类名也可以看出来AbstractQueuedSynchronizer, A (Abstract) …