JVM
风度玉门
人得先清心寡欲,方能高枕无忧。
展开
-
面试-JVM
1 并发模型分类 共享内存:在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。 消息传递:在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。如果编写多线程程序的Java程序员不理解隐原创 2015-07-21 10:44:31 · 1194 阅读 · 0 评论 -
HotSpot垃圾收集器
本篇主要介绍一下JVM的几种垃圾收集器。原创 2014-12-15 00:06:15 · 1920 阅读 · 0 评论 -
Java引用类型(Reference)
GC的基本思想是考察每个对象的可触及性(可达性),就是从GC Root开始是否可以访问到这个对象。如果可以,则可达,否则就是不可达。在Java中,可作为GC Roots的对象包括: JVM栈(栈中的本地变量表)中的引用的对象 方法去中类静态属性引用的对象 方法区中常量引用的对象 本地方法栈中JNI(Native方法)引用的对象原创 2017-10-22 22:59:32 · 403 阅读 · 0 评论 -
JVM垃圾收集算法
本篇主要阐述一下java垃圾收集的几种算法。其中主要包括:复制算法、标记-清除算法、标记-压缩(清理)算法和分代收集算法。下面简单介绍一下其实现的原理。1、复制算法原创 2014-12-10 23:01:21 · 951 阅读 · 0 评论 -
JVM运行时数据区
本篇主要介绍一下,JVM运行时数据区的内容。首先大概介绍一下下图所示的内容。JVM运行时数据区主要分为了两大部分的内容:线程共有的方法区(Method Area)和堆(Heap)、线程私有的虚拟机栈(VM Stack),本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。在数据区下面的执行引擎中又包含了:即时编译器(JITCom原创 2014-12-10 20:00:22 · 945 阅读 · 0 评论 -
JVM垃圾收集器细节补充
禁用System.gc() System.gc()会显式直接触发Full GC,同时对老年代和新生代进行回收。JVM的内存回收都是自动的,一般情况下不需要我们手动触发GC。因此如果要在程序中禁用,可以通过-XX:+DisableExplicitGC禁用。当程序中使用了System.gc(),就相当于调用了一个空函数。对象何时进入老年代 一般情况下,新创建的对原创 2017-10-28 15:29:32 · 367 阅读 · 0 评论 -
HotSpot的G1收集器(日志分析)
GC日志分析 笔者找了一个WEB项目,然后使用如下GC参数,获得G1的GC日志。-Xmx1024m -Xms1024m -XX:+UseG1GC -XX:+PrintGCDetails -XX:MaxGCPauseMillis=200 -Xloggc:/Users/xuefeihu/Desktop/gc.log 截取的部分GC日志如下所示:# 初原创 2017-10-28 15:21:08 · 2701 阅读 · 0 评论 -
HotSpot的G1收集器
G1收集器(Garbage-First)是在JDK7中正式使用的GC收集器。从长期看来,它是为了取代CMS收集器,并且在刚刚发布的JDK9中,G1已经成为默认的GC收集器。 G1和其他收集器截然不同,从分代上看,它仍然属于分代垃圾收集器,也会区分新生代、老年代,仍然有Eden区和Survivor区;从堆结构上看,它并不要求新生代、老年代都连续。作为CMS的长期替代方案,G1使用了原创 2017-10-28 15:06:00 · 728 阅读 · 0 评论 -
Class文件结构
Class文件是由Java语言或者其他语言编译而得到的,然后再交给JVM去加载和执行。对于Class文件,我们可以通过文本编辑器查看它的16进制编码,然后分析它的组成构造。下面我们看一下Class文件包含哪些模块: 对于Class字节码文件的查看,最初我们会用16进制的文本编辑器查看。但是这种方式并不常用,一般情况下我们会使用javap -verbose XX.cla原创 2017-09-17 15:37:08 · 735 阅读 · 0 评论 -
Class字节码指令解释执行
JVM指令主要包含了一下几种类型:加载和存储指令、运算指令、类型转换指令、对象创建与访问指令、操作数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令、同步指令等。基于栈的解释器执行过程 下面看一下一个简单的代码片段,如下所示:public class StackTest { public int calc() { int a = 100; int原创 2017-09-17 16:00:19 · 4141 阅读 · 1 评论 -
ClassLoader类加载器
ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的。ClassLoader通过各种方式,将CLass信息的二进制流读入系统,然后交给JVM进行连接、初始化等操作。比较两个类是否“相等” 比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义。这里所指的相等,包括equals()、isAssignable原创 2017-09-17 20:40:47 · 455 阅读 · 0 评论 -
Class加载过程
本篇主要介绍一下JVM类加载的过程。类从被JVM加载到内存到从内存中卸载,其生命周期包括:加载(loading)、验证(verification)、准备(preparation)、解析(resolution)、初始化(initialization)、使用(using)和卸载(unloading)7个阶段。其中加载、验证、准备、初始化、和卸载的顺序是固定的,解析有可能会在初始化之后进行。如下图所示:原创 2014-12-25 23:13:06 · 1078 阅读 · 0 评论 -
可视化性能监控工具VisualVM
VisualVM是一个功能强大的免费的可视化性能监控工具,它的功能基本上包含了JDK提供的其他的工具。除此之外,它还可以支持插件的拓展。下面介绍一下其使用。启动当jvisualvm命令在系统的PATH中时,在命令行中执行jvisualvm便可以启动工具。如下所示:...原创 2018-07-11 22:31:01 · 7184 阅读 · 0 评论