标签 jvm 下的文章

深入JVM内核(十)


下面我们来探究JVM字节码的执行

我们知道javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。下面我们就用它对程序进行分析。

看一段代码:

 public class Calc {
    public int calc() {
        int a = 500;
        int b = 200;
        int c = 50;
        return (a + b) / c;
    }
}


深入JVM内核(九)


下面我们来分析一下java程序中的Class文件结构。 我们知道,一个java项目会在在bin目录下编译生成.class文件并交由JVM运行,但是.class文件不仅可以由java代码生成,ruby脚本,Groovy代码以及其他JVM语言 也可以生成.class文件交由JVM运行。 用UltraEdit可以打开二进制文件,我们用它打开一个.class文件看看:

1.png

它的文件结构非别包含:魔数,版本,常量池,访问符,类、超类、接口,字段,方法,属性。下面我们逐一介绍。


深入JVM内核(八)


相信学过Java的同学都或多或少了解过这个概念,下面我们一起来看看JVM中的锁是怎么样的。 (请注意传统的锁是重量级的,monitorenter有可能让线程在OS层面挂起) 锁有什么用呢? 锁可以用来维护java程序中的线程安全。比如多线程网站统计访问人数,我们可以使用锁,维护计数器的串行访问与安全性。


深入JVM内核(七)


这里我们将对JVM中的堆进行详细分析。

内存溢出(OOM)的原因 在JVM中,内存区间包括:堆,永久区,线程栈和直接内存 1.而内存溢出的原因是占用大量堆空间,导致直接溢出,例如:

import java.util.ArrayList;
 public class Test {
    public static void main(String args[]){
        ArrayList<byte[]> list=new ArrayList<byte[]>();
        while(true){
            list.add(new byte[1024*1024]);
        }
    }
}

抛出异常:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

解决方法:可以手动设置增大堆空间,及时释放内存

再看一个例子:


深入JVM内核(六)


今天来介绍JVM中的类装载器

首先简单介绍一下class类的装载验证流程:首先加载,然后链接,链接又包含(验证 ,准备,解析),然后再进行初始化。 下面具体介绍