Tony 发布的文章

深入JVM内核(四)


今天让我们对GC及其算法进行研究。

首先,什么是GC,我们在前面说过,就算垃圾收集器,Java中,GC的对象是堆空间和永久区。那么它是靠什么方法来搜集垃圾的呢?有以下四种:

  1. 引用计数法
  2. 标记清除
  3. 标记压缩
  4. 复制算法

    让我们逐个介绍。


深入JVM内核(三)


今天我们来学习如何获取JVM的信息并对信息进行分析。

首先,要打印JVM的信息,假如你用的是eclipse,选择Windows-Preferences-Java-installed JREs,对jdk进行编辑,在Default VM arguments中加入预定参数并保存,就可以在运行java程序后打印出JVM日志了。如,加上-XX:+PrintGCDetails -Xloggc:C:\gc.log,GC日志保存到C盘根目录。 还有一种方法是修改针对某个可运行类,右键,选择Run As-Run Configurations。选择 Arguments,并添加VM参数,如下图 1.png

运行一个程序,控制台便会输出JVM信息 2.png

下面我们对结果进行分析 在那之前我们先了解几个基本的参数设置:


深入JVM内核(二)


在这里将继续对JVM进行探究,首先来看看

JVM启动流程

1.png 首先装载JVM所需的配置,通过环境变量寻找JDK中的java.exe实现查找,同时可以找到jvm.cfg(相当于配置文件)。接着根据配置找到JVM.dll(在jre的bin/server目录下)并调用系统API装载JVM.dll。最后就可以获得本地化接口并从main开始执行程序。


深入JVM内核(一)


首先让我们了解一下什么是JAVA虚拟机。

  • 免去长篇大论,简单来说,JAVA虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。除了JVM,虚拟机还包括VMWare,Visual Box。其中VMWare或者Visual Box都是使用软件模拟物理CPU的指令集,而JVM使用软件模拟Java 字节码的指令集。

  • 下面来简单谈一谈JVM的发展历史,所谓知往昔而见未来,了解编程语言的发展历史绝非一无是处,这里简单介绍,感兴趣的朋友可以深入了解: