- 博客(7)
- 收藏
- 关注
原创 线程安全
线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。这个定义比较严谨,它要求线程安全的代码都必须具备一个特征:代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程问题,更无须自己才起任何措施来保证多线程的正确...
2019-06-25 14:04:52 210
原创 Java内存模型与线程
JVM试图定义一种Java内存模型(Java Memory Model JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前如c/c++等直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另一套平台上并发访问却经常出错。JDK1.5后,JMM已经完善和成熟起来了。...
2019-06-24 08:57:38 242
原创 虚拟机字节码执行引擎(二)
方法调用方法调用并不等同于方法执行,方法调用阶段唯一任务就是确定调用哪个方法,暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用时最普遍最频繁的操作,但前面讲过,class文件的编译过程并不包含连接步骤,一切方法调用在class文件里存储的都是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用)。这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法调用过程...
2019-06-18 10:21:03 148
原创 Java晚期(运行期)优化
概述Java程序起初是通过解释器(Interperter)进行解析执行的,当虚拟机发现某个代码或方法特别频繁时,就会把这些代码认定为热点代码(hot spot code)。为了提高热点代码执行效率,运行时,会将其编译为本地的机器码,并进行各种层次优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler JIT编译器)。JIT并不是虚拟机必须部分,JVM也没有规...
2019-06-17 15:29:56 449
原创 Java早期编译优化
概述Java语言编译期是一段不确定的操作过程,可能指前端编译器(叫编译器的前端更准确)把*.java文件转变为*.class文件的过程,也可能指虚拟机后端编译器(JIT编译器 Just Time Compiler)把字节码转为机器码的过程;还可能指静态提前编译器(AOT编译器)直接把*.java文件编译为本地机器代码的过程。列举下这三类编译过程中又代表性的编译器:前端编译器:Sun的J...
2019-06-12 10:46:34 221 1
原创 Integercache问题
昨天在开发中遇到一个问题,定义了两个Integer变量,暂且定义为Integer a; Integer b;这两个值由前端赋值并传到后台,前台传的是a = 12345, b = 12345, 但我在后台比较的时候 if (a == b),却返回false,好无语啊,不都是123吗?为什么返回false,后来改为equals(),返回true,但其中的有些端倪还不太清楚,现总结下:我们知...
2019-06-10 20:11:17 964 2
原创 tomcat:正统的类加载器架构
主流的Java Web服务器,如Tomcat、Jetty、WebLogic、WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不止一个)。因为一个功能健全的Web服务器,要解决如下几个问题:部署在同一个服务器上的两个Web应用程序所使用的Java类库相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求一个类库在一个服务器中只有一份,服务器...
2019-06-10 19:35:41 624
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人