JVM-10-虚拟机字节码执行引擎
Java虚拟机的执行引擎
输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。
本章主要是从概念模型的角度讲解虚拟机的方法调用和字节码执行。
帧栈
帧栈是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。
每一个帧栈中都包括以下信息:局部变量表(Local Varable Table)、操作数栈(Operand Stack...
2018-10-08 08:04:16 |
JVM
JVM-09-classloader 类加载
ClassLoader
官方概念,看一下即可。
类定义
public abstract class ClassLoader
extends Object
概念
类装入器是负责装入类的对象。类类装入器是一个抽象类。给定类的二进制名称,类装入器应该尝试定位或生成构成类定义的数据。
典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。
每个类对象都包含对定义它的...
2018-10-08 08:04:16 |
JVM
JVM-08-bytecode 字节码指令
Bytecode 字节码指令
jvm 内部细节
本文分为三部分,每一部分都分成几个小节。
每个小节都可以单独阅读,不过由于一些概念是逐步建立起来的,如果你依次阅读完所有章节会更简单一些。
每一节都会覆盖到Java代码中的不同结构,并详细介绍了它们是如何编译并执行的。
变量
局部变量
JVM是一个基于栈的架构。方法执行的时候(包括main方法),在栈上会分配一个新的帧,这个栈帧包...
2018-10-08 08:04:16 |
Java
JVM-07-class file JVM class file 文件信息
class 文件查看
java 代码
package com.github.houbb.jvm.learn;
public class Main {
public static void main(String[] args) {
System.out.println("hello jvm");
}
}
编译后参看文件
>javap -v...
2018-10-08 08:04:16 |
Java
JVM-06-jdk 命令行工具,jdk 可视化工具
jdk 自带工具
在 java 安装目录 bin 下。
你可以看到对应的信息,这里有很多 java 为我们提供的工具。
$ ls
appletviewer.exe* java-rmi.exe* javap.exe* jdb.exe* jmap.exe* jstack.exe* klist.exe* poli...
2018-10-08 08:04:16 |
Java
JVM-05-class load Java 类加载机制
一道题目引发的血案
首先看一道题目。
题目
Singleton.java
public class Singleton {
private static Singleton singleton = new Singleton();
public static int count1;
public static int count2 = 0;
...
2018-10-08 08:04:16 |
Java
JVM-04-JVM 调优
JVM 性能调优
在高性能硬件上部署程序,目前主要有两种方式:
通过 64 位 JDK 来使用大内存;
使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。
使用 64 位 JDK 管理大内存
堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。
如果堆内存为 14 G,那么每次 Full GC 将长达数十秒。如果 Ful...
2018-10-08 02:04:06 |
Java
JVM-04-GC 垃圾回收
GC
概念
在计算机科学中,垃圾收集(GC)是一种自动内存管理方式。
垃圾收集器,或者仅仅是收集器,试图回收垃圾,或者被程序不再使用的对象占用的内存。
垃圾收集是John McCarthy在1959年左右发明的,用于简化Lisp中的手动内存管理
垃圾收集本质上与手动内存管理相反,手动内存管理要求程序员指定释放和返回内存系统的对象。然而,许多系统使用多种方法的组合,包括堆栈分配和区域...
2018-10-08 02:04:06 |
Java