自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 maven仓库中_remote.repositories的作用

首先直接给结论:_remote.repositories的作用是当maven本地仓库缓存了jar/pom的情况下修改了maven的配置文件(settings.xml)后依然会去远程仓库获取。以org.slf4j:slf4j-api-1.5.6.jar为例,本地仓库中的_remote.repositories文件内容如下:#NOTE: This is a Maven Resolver internal implementation file, its format can be changed wi

2021-01-28 21:41:49 11208 7

原创 Java注解底层原理分析

注解是什么?其实注解和注释是很类似,区别在于注释是给开发人员看的,而注解是给编译器和jvm看的,是可以在程序编译时被编译器获取或运行时通过反射被用户获取的。引用Think in java中的一句话:"如果没有用来读取注解的工具,那注解也不会比注释更有用"。关于如何读取注解, jdk为我们提供了一系列的api,包括AnnotatedElement类和sun.reflect.annotation包等。注解的本质?Annotation类的描述中说:Annotation是所有注解的父接口。那么也就是说.

2021-01-18 20:28:44 636 2

原创 读懂GC日志

先给出一个小demo,这里我偷个懒直接用的周志明《深入理解Java虚拟机》第三版P69的代码清单3-1:public class ReferenceCountingGC{ public Object instance = null; private static final int _1MB = 1024*1024; private byte[] bigSize = ...

2020-07-25 23:02:37 263 1

原创 minor gc和full gc的触发条件

鉴于现在各种GC名称已经叫混了,首先声明一下Minor GC和Full GC的定义:Minor GC:回收区域只包括年轻代(Eden, From)。Full GC: 回收区域包括整个堆区和方法区。注:有的人把Major GC和Full GC混为一谈,我更愿意认为Major GC等价于Old GC,目前只有CMS收集器存在只回收老年代的情况。Minor GC触发条件:E...

2020-01-14 15:26:22 400

原创 GC overhead limit exceeded

今天本想验证一下字符串常量池移动到堆内存中去了,验证的思路很简单,使用String::intern()不停的往字符串常量池中添加字符串,验证是否会出现java.lang.OutOfMemoryError:java heap space错误。代码清单如下:public class RuntimeConstantPoolOOM { public static void main(Stri...

2020-01-12 21:48:51 194

原创 浅谈Java中的oop-klass二分模型

学习JVM的话,oop-class模型永远是一个绕不过去话题。我们都知道HotSpot VM几乎可以说是纯C++语言编写的Java虚拟机,那么Java的对象模型和C++的对象模型之间究竟有什么关系呢?这个问题简单回答就是oop-class二分对象模型。究竟什么是oop-class模型呢?事实上HotSpot底层究竟怎么表示一个Java对象这个问题归根结底就是C++怎么表述一个Java对象。...

2020-01-08 21:30:49 602

原创 javac命令和java命令用法详解

1. javac 命令用法:javac <options> <source files> <@files>source files: 一个或多个要编译的源文件(.java文件)@files:一个或多个 包含待编译.java文件列表 的文件。注:当要编译的.java文件较少,直接在javac命令后接上源文件列表即可,例如:javac ...

2020-01-04 22:44:10 3011

原创 为什么young gc时要把old gen中的对象作为gc roots的一部分。

我们知道HotSpot VM 是基于分代垃圾收集机制gc的(G1也是一种特殊的分代机制,动态分代),那么在分代收集的过程中显然会存在一个问题那就是跨代引用。比如当我们进行young gc是,新生代中的对象是完全有可能被老年代所引用的。然而young gc的过程中我们并不会收集老年代中的对象(无论是否存活),当jvm从gc roots 出发trace的过程中如果出现老年代对象会直接中断这条trace...

2020-01-01 22:49:08 475

原创 Java方法内联

强调一下:本文中关于方法内联的内容大部分摘抄于郑雨迪的《深入拆解Java虚拟机》在看Java虚拟机JIT优化部分的书籍和博客时我们经常看到一个技术名词:方法内联。到底什么是方法内联呢?它指的是:在编译过程中遇到方法调用时,将目标方法体纳入编译范围之中,并取代原方法调用的编译手段。方法内联不仅可以消除调用本身带来的性能开销,还可以进一步触发更多的优化。因此方法内联是编译优化中重要的一环。以ge...

2020-01-01 14:59:08 553

原创 聊一聊Java中的各种常量池

1.Class文件常量池在Class文件中除了有类的版本、方法、字段等描述信息以外,还有一项信息是常量池,也是占用class文件空间最大的数据项。由于常量池中常量的数量是不一定的,所以常量池的入口会放置一项u2类型的数据项用于记录常量池中常量的数目。常量池中主要存放两大类常量:字面量和符号引用。字面量字面量类似于Java语言中常说的常量的概念,包括字符串和被final修饰的常量值;...

2019-12-31 18:24:04 221

原创 JDK1.8 默认使用什么垃圾收集器?

使用java -XX:+PrintCommandLineFlags -version查看一下-XX:InitialHeapSize=132500864 //初始堆大小-XX:MaxHeapSize=2120013824 //最大堆大小-XX:+PrintCommandLineFlags //程序运行前打印出用户手动设置或者JVM自动设置的XX选项,因为我们执行时间加上了这个选...

2019-12-26 22:30:02 13833

原创 浅析Java对象头结构和synchronized关键字原理

Java对象的内存布局在Hotspot虚拟机中,堆中的Java对象由以下三部分组成:1. 对象头2. 实例数据3. 对齐填充事实上实例数据部分存储的就是我们在对象中定义的实例成员变量包括从父类中继承过来的(不包括类成员,它们在方法区中分配),实例成员变量包括基本数据类型和引用数据类型,基本数据类型在对象中存储的就是这个值,而引用数据类型我们存储的只是它的引用。这也就是为什么...

2019-12-17 15:05:24 694

原创 Thread类join方法原理浅析

很多时候,一个线程的输入可能非常依赖于另外一个或者多个线程的输出,此时,这个线程就需要等待依赖的线程执行完毕,才能继续执行。Thread类提供了join方法来实现这个功能。Thread类对join方法提供了几种不同的重载版本,我们重点关心以下两种:public final void join() throws InterruptedExceptionpublic final synchron...

2019-12-16 19:47:37 195

原创 关于JMM内存模型的一些个人理解

JMM定义的八个内存间交互操作(原子操作)lock: 作用于主内存的变量,把一个变量标记为线程独占unlock: 作用于主内存的变量,释放被标记为独占状态的变量read: 作用于主内存的变量,将其读入到工作内存中load: 作用于工作内存的变量,把read读到的变量存入相应的变量副本中use: 作用于工作内存的变量,将变量副本的值传递给执行引擎。当虚拟机遇到一个需要变量值的字节码指令执...

2019-12-14 04:05:35 390 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除