• JVM原理与实现——Reference

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    duke_beer1. Reference的基本介绍

    reference的中文含义是“引用”。由于本文所基于的HotSpot虚拟机主要使用C++开发,因此我担心有人会把C++的引用和这里的reference混为一谈。所以,我会尽量使用reference(首字母小写)来表述”引用“这个概念。通常我们写下如下的语句: Object obj; 其实就是定义了一个reference。我可以很直白的说出一个结论——在32位机器上HotSpot的reference就是一个32bit的指针。如下图所示,reference指向一个堆空间的实际对象。这种常用的reference,我们给它起个名字——StrongReference。之所以这样叫,是为了体现它和其他Reference(即将登场)的联系与区别。

    image

    在java.lang.ref包下,有这样几个类:SoftReference、WeakReference以及Phan【查看更多】

  • JVM原理与实现——Synchronized关键字

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    openJDK_gitar

    在多线程的Java程序中,Synchronized关键字是经常出现的。这篇文章里,我们就来研究一下它的实现原理。比如以下的示例程序:

    public class SynchronizedTest {
        int syncFunc() {
            synchronized(this) {
                int a = 0;
                return a;
            }
        }
    }
    

    对应的字节码如下:

    Compiled from "SynchronizedTest.java"
    public class SynchronizedTest {
      public SynchronizedTest();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."":()V
           4: return
    
      int syncFunc();
        Code:
           0: aload_0
           1: dup
           2: astore_1
           3:
    【查看更多】
  • JVM原理与实现——Thread

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    Jaa

    前言

    之前研究OpenJDK的时候,并没有注意Java线程模型方面的东西。最近在学习一些Java并发方面的知识时,关于JVM线程实现原理的疑问又浮上心头。昨天晚上,突然想起以前研究OpenJDK的资料还在,于是开始在OpenJDK的源码里面研究Thread的实现。搞到凌晨三点多,差不多弄清楚了一个大概,这篇博文就主要把把相关的知识点记录下来。

    1. Java中Thread

    对于Java开发者来说,java.lang.Thread的确是再熟悉不过了。Java多线程程序都是通过它来实现功能的。有关Thread的使用方式,这里我不想赘述了,而是直奔Thread的实现原理。任【查看更多】

  • Java虚拟机Hotspot源码分析之找门

     本文出自:【InTheWorld的博客】 (欢迎留言、交流)

            最近研究JVM已然走火入魔了,下午看了两个小时,终于看出了一点端倪。像我这样Java学个半吊子,就开始研究JVM源码的人实在是奇葩的存在!源码据说有50多万行,不过感觉也不是很多的样子。大概是linux源码看多了,觉得这hotspot并不是很大(坐等被虐出翔)。先记录一下成果吧!
            首先,目录结构: 有os,cpu,os_cpu,share这几个目录,顾名思义,就是存放着不同特点的代码。os依赖的,cpu依赖的,共有的,还有os和cpu都依赖的。
            其实,东西最多的是share目录下的东西。毕竟C++也是可移植的嘛!我跑马观花的看了看《深入Java虚拟机》,发现这本书的重点集中在字节码什
    【查看更多】