public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { this.a = a; } } javap -verbose MyTest1 警告: 二进制文件MyTest1包含jvm.bytecode.MyTest1 Classfile /Users/luozhiyun/Documents/work/jvm_lecture/target/classes/jvm…
今天起开启JVM的新的知识学习篇章----Java的字节码,那学习Java字节码有啥用呢?我们知道Java是跨平台的一门语言,编写一次到处运行,而支撑着这个特性的根基为两点:JVM和.class字节码文件,java在不同的平台上编译生成的.class文件是一模一样的,而JVM针对不同的操作系统会有不同的JVM,也就是JVM其实并非是跨平台的,而生成的.class文件其实是一个二进制文件,该文件并非是给人看的,而是给机器看的,所以肯定是看不懂的,但是针对字节码JVM是有规范定义的,而如今基于JVM…
public class MyTest2 { String str = "Welcome"; private int x = 5; public static Integer in = 10; public static void main(String[] args) { MyTest2 myTest2 = new MyTest2(); myTest2.setX(8); in =20; } public void setX(int x) { this.x = x; } } javap…
身为一个java程序员如果只会使用而不知原理称其为初级java程序员,知晓原理而升中级.融会贯通则为高级 作为有一个有技术追求的人,应当利用业余时间及零碎时间了解原理 近期在看深入理解java虚拟机 第二版(基于jdk1.7)所以想写一些观后心得,整理一些比较重点的内容,也加强自己对重点内容的记忆! 以下默认虚拟机为hotsport虚拟机 一.jvm内存模型 ① 程序计数器: 程序计数器为每个线程私有 作用可以理解为在虚拟机解析字节码时记录当前字节码的行号 占用的内存较小 是唯一一个不会发生内存…
Java内存模型 主内存与工作内存 Java内存模型主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量(Variable)与Java编程中的变量略有区别,它包括实例变量/静态字段和构成数组对象的元素,不包括局部变量和方法参数(线程私有).为获得较好的执行效能,Java内存模型并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交换,也没有限制即时编译器调整代码执行顺序这类权利. Java内存模型规定所有变量都存储在主存(Mai…
一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间. 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支/循环/跳转/异常处理/线程恢复等基础功能都需要依赖…
原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011119111014657/ 使用说明< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> -XX:+<option> 启用选项 -XX:-<option> 不启用选项 -XX:<option>=<…
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器. HotSpot虚拟机的垃圾回收器 图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用.虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器. 概念理解 并发和并行这两个…
Java字节码文件查看 我们有一个类Test01,具体内容如下: package bytecode; public class Test01 { private int i = 0; public int getI() { return i; } public void setI(int i) { this.i = i; } } 编译这个类,得到Test01.class文件 IDE查看 用IDEA编译器查看 我们发现查看到的class文件与类文件基本相同,这是因为IDE自带的Fernflower…
温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看. 前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件.但其实字节码是有一套规范的,而规定字节码格式的就是<Java 虚拟机规范>.<Java 虚拟机规范>规定了 Java 虚拟机结构.Class 类文件结构.字节码指令等内容.其中类文件结构是有必要了解的一个内容. 字节码文件结构是一组以 8 位字节为基础的二进制流,各数据项目严格按照顺序…