dianyan5139
码龄9年
关注
提问 私信
  • 博客:3,866
    3,866
    总访问量
  • 暂无
    原创
  • 1,042,404
    排名
  • 0
    粉丝
  • 0
    铁粉
  • 加入CSDN时间: 2016-03-26
博客简介:

dianyan5139的博客

查看详细资料
  • 原力等级
    当前等级
    0
    当前总分
    0
    当月
    0
个人成就
  • 获得1次点赞
  • 内容获得0次评论
  • 获得4次收藏
创作历程
  • 11篇
    2019年
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

synchronized的锁升级/锁膨胀

偏向锁偏向第一个拿到锁的线程。即第一个拿到锁的线程,锁会在对象头 Mark Word 中通过 CAS 记录该线程 ID,该线程以后每次拿锁时都不需要进行 CAS(指轻量级锁)。如果该线程正在执行同步代码块时有其他线程在竞争(指其他线程尝试 CAS 让 Mark Word 设置自己的线程 ID),会被升级为轻量级锁。如果其他线程发现 Mark Word 里记的不是自己,且发现原持有...
转载
发布博客 2019.09.22 ·
322 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

转)Understanding Java Memory Management

Understanding Java Memory Management - IBMJava Native Interface (JNI) Objects and CodeJava Native Interface code can directly allocate native memory using system calls:– malloc, calloc, reall...
转载
发布博客 2019.09.08 ·
283 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java8的@sun.misc.Contended注解

@sun.misc.Contended 介绍@sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line)。这里的缓存行是指 CPU 缓存(L1、L2、L3)的存储单元,常见的缓存行大小为 64 字节。(注:JVM 添加 -XX:-RestrictContended 参数后 @sun.misc.C...
转载
发布博客 2019.09.15 ·
468 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Java对象(创建过程、内存布局、访问方法)

(Java 普通对象。不包括数组、Class 对象等。)​对象创建过程类加载遇到 new 指令时,获取对应的符号引用,并检查该符号引用代表的类是否已被初始化。如果没有就进行类加载。分配内存从堆中找到一块空间划分给对象。分配时,为了避免并发问题,JVM 会通过 CAS + TLAB 来保证线程安全。TLAB 本地线程分配缓冲每个线程都会在堆中预先分配一小块内存,这块空间叫...
转载
发布博客 2019.09.06 ·
127 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

转)JVM Internals

http://blog.jamesdbloom.com/JVMInternals.html(基于 Java 7)转载于:https://www.cnblogs.com/eycuii/p/11485075.html
转载
发布博客 2019.09.08 ·
160 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

几种常量池的区分

Class 常量池 Constant Pool存在于编译生成的 Class 文件中。用于存在各种字面量、符号引用。​方法区方法区在 JVM 启动时创建,里面包含运行时常量池、字符串常量池、静态变量、方法的代码等。方法区是堆的逻辑组成部分,但其实现要看具体 JVM 是存放到哪的,而且也没有规定是否需要对方法区进行垃圾回收。运行时常量池 Runtime Constant Pool...
转载
发布博客 2019.09.06 ·
125 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

为什么switch不支持long

switch 支持的类型在 Java 语言规范里中,有说明 switch 支持的类型有:char、byte、short、int、Character、Byte、Short、Integer、String、enum。​为什么不支持 long ?为什么只支持上面几种?int、String 都可以,为什么不支持 long ?原因就是 switch 对应的 JVM 字节码 lookupsw...
转载
发布博客 2019.09.06 ·
874 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

重载(编译期多态),重写(运行时多态)

重载重载可以在编译期确定调用的方法。为什么重载不能根据返回值类型区分?因为有时候只关心方法的执行,而不去关心返回值。但其实 JVM 是允许只根据返回值来区分的:在 Class 文件常量池里,每个方法有它的名称、描述符(参数类型+返回值类型)。JVM 规范中是允许 Class 文件内存在名称+描述符不同的方法。但是 Java 语言规范里,规定了只根据名称+参数来区分。如何确定...
转载
发布博客 2019.09.04 ·
1142 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

类加载Class Loading

JVM 何时、如何把 Class 文件加载到内存,形成可以直接使用的 Java 类型,并开始执行代码?​类的生命周期加载 - 连接(验证、准备、解析)- 初始化 - 使用 - 卸载。注意,加载、验证、准备、初始化顺序是确定的,但是不是按部就班地「执行」,而是按部就班地「开始」。另外,为了支持 Java 语言的运行时动态绑定,解析阶段有时候可以在初始化阶段之后再开始。​什么时...
转载
发布博客 2019.09.05 ·
145 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

内部类

静态内部类如何访问外部类的私有类变量?通过编译阶段生成的一个访问外部类的 static 的 access$x00 方法,然后在静态内部类中,通过外部类的类名调用,如 OuterClass.access$x00。​非静态内部类编译时对内部类构造函数上会默认注入外部类引用,类似:class Outer { class Inner { private final Out...
转载
发布博客 2019.09.04 ·
92 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

String的intern方法

Class 常量池 Constant Pool存在于编译生成的 Class 文件中。用于存在各种字面量、符号引用。​方法区方法区在 JVM 启动时创建,里面包含运行时常量池、静态变量、方法的代码等。方法区是堆的逻辑组成部分,但其实现要看具体 JVM 是存放到哪的,而且也没有规定是否需要对方法区进行垃圾回收。运行时常量池 Runtime Constant PoolJVM 规范...
转载
发布博客 2019.09.04 ·
128 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏