- 博客(6)
- 收藏
- 关注
原创 Java反射的底层原理,以及Java反射的性能分析及优化
java的反射技术,号称是编程界的九阳神功,也可以说是框架的灵魂。也正是这种反射机制使静态语言的java具备了动态语言的某些特质。就是有了反射,才让java动态,编程的时候更加灵活。补充:动态语言 和 静态语言(1)动态语言 动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言: Object-C.C#、JavaScript, PHP,Pyth...
2022-02-24 00:04:19
5148
2
原创 对象的分配过程以及创建过程,单例模式DCL就一定没有问题吗,如果发生指令重排了会导致什么问题?
上篇文章主要讲了对象的定位,以及jdk的优化技术逃逸分析和标量替换,这样的新技术出现,就导致java对象实例都分配在堆内存里面也变得不是那么的绝对了。对象的分配过程如下:方法里面开始new一个对象,即时编译器会对这个对象的动态作用域进行分析,如果满足逃逸分析和标量替换的条件,并启用了标量替换,那么就在当前栈帧里面去分配对象,等待方法执行完毕,随着方法的出栈,此对象也就消失了。如果不满足要求,那么会分配到堆内存里面,分配之前会判断,如果对象的大小太大了(jvm调优里面有个参数XX:PretenureS
2022-02-23 13:24:44
374
1
原创 Java对象的定位与分配,对象一定会创建在堆内存里面吗
首先讲下对象的定位。啥叫对象的定位呢?比如:T t = new T(); 定位的意思就是说如何通过引用变量t 去 找到T的实例。咋找呢?通俗点就是:t 的指针不就是指向T对象实例,cpu通过指针里面存放的地址,找到T对象实例的首地址,然后通过对象的大小在内存里面截取呗,比如对象大小是24个字节,那么就从首地址开始截取24个字节呗。没错,是这么干的。但是jvm的执行过程,其实是有两种方式的。先说结果,再说细节,最后分析比较。java对象的定位主要会分为两种方式:直接和间接。直接方式,也就是直接指针
2022-02-22 21:46:15
2867
原创 Java对象在jvm堆内存中的存储布局
这次说的是64bit的jvm,暂不谈32bit的jvm,两者的对象大小是不一样的。java对象的存储布局分为两种情况:普通对象 和 数据。先说普通对象吧:如下图那为啥对齐单元的大小是8个字节呢?因为是64bit位的jvm,8个字节刚好是64个比特位,这样读取的效率高。那这个东西我们在代码里面看得到吗? 可以看到的。我们在pom.xml里面引入依赖:<dependency> <groupId>org.openjdk.jol...
2022-02-20 18:26:21
1473
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人