silen三流码农

TA的文章
  • 从Java内存模型的角度看Volatile
    Volatile 在多线程编程中,我们常常用到Volatile来维护变量的可见性,他是一个比较弱的同步机制。相较于sychronized关键字,在访问共享变量的时候,volatile不会进行加锁,因此他也不会造成线程阻塞,所以他更加轻量! 深入点看的话,当我们将变量声明为volatile类型的时候,编译与运行的时候,我们都会注意到这个变量是共享的,因此不会对将对该变量的操作和其他内存块一起 重排序,volatile不会被缓存到寄存器或者其他处理器不可见的地方,因此在读取volatile变量时,总会返回最新写入的值。 上文提到了一个词,重排序 ,何为重排序? 重排序即编译器和处理器对代码指令的动...
    •  2
    •  1
    •  2019-02-11
  • Tomcat之 --类加载机制
    开始 我们学习JAVA的时候,都知道JAVA是跑在JVM虚拟机上的,而类加载器则是将编译后的class做加载,校验,转换解析,初始化,最终形成被虚拟机可以直接使用的JAVA类型,这便是我们知道的类加载机制。这是类加载器的执行的必须流程 ClassLoader类 classLoader类是java.lang包中一个类,他的作用是根据类名,将类名所指定的类加载,生成特定的字节码,然后从这些字节码中再实例化出一个java.lang.class的实例。我们来具体看下classLoader的流程。 protected Class<?> loadClass(String name, boolean res...
    •  1
    •  2
    •  2019-01-25
  • 由一个服务器异常引发的思考 --JVM堆外内存
    开始 前两天意外发现这么一个情况,某个组内共用的JAVA服务器上,莫名其妙的发生个别服务进程被杀死的情况,java服务都像蒸发了一样,莫名其妙的消失了,通过dmesg命令如下所示 通过dmesg命令可以发现,都是超过了系统内存,导致了Linux系统 杀掉了这几个java进程 Linux内存模型  首先,我们来粗略地了解下Linux的内存模型,由于我们的Linux版本是x86的内存架构,这边我们仅针对x86来做分析 主要包含以下几个方面: 虚拟内存管理,介于用户程序和物理内存之间的逻辑层,就是我们常说的用户态内存 物理内存管理,内核级内存,一般由CPU才能调...
    •  1
    •  2
    •  2019-01-20