JVM
一个_坏人
这个作者很懒,什么都没留下…
展开
-
(一)JVM 如何处理异常信息?
先上一张图:在Java 规范中,所有的异常被定义为 Throwable 或其子类的实例。其中 Error 表示该线程执行状态无法恢复,需要终止线程甚至是虚拟机;Exception 可以被捕捉并处理。异常的设计初衷是将运行时产生的错误信息通过某种方式传递给某个接收者——该接收者将知道如何正确的处理这个问题。Java 使用异常来提供一致的错误报告模型,使得构件能够与客户端代码可靠地...原创 2019-01-15 22:17:58 · 442 阅读 · 0 评论 -
JVM 之方法内联(inline)
方法内联:在编译过程中遇到方法调用时,将目标方法的方法体纳入编译范围之中,并取代原方法调用的优化手段。方法内联不仅可以消除调用本身带来的性能开销,还可以进一步触发更多的优化。因此,它可以算是编译优化里最为重要的一环。...原创 2019-05-12 20:46:03 · 686 阅读 · 0 评论 -
(十)hsdis + JITWatch 分析 JIT
JIT 编译器会优化热点代码,为了分析需要查看其反汇编指令。安装hsdisHotspotdisassembler,其实就是一个动态库,csdn上就有下载,下载后放在 $JAVA_HOME/jre/lib 目录下。经验是否安装成功:java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version安装JITWatch...原创 2019-05-08 21:46:25 · 289 阅读 · 0 评论 -
(九)JVM之循环优化
循环无关代码(Loop-invariant Code)外提如下循环代码:package per.william.ex.simd;public class Foo { int foo(int x,int y ,int[] a){ int sum=0; for(int i=0;i<a.length;i++){ ...原创 2019-05-03 08:11:27 · 457 阅读 · 0 评论 -
(八)向量化
public class Foo { public void foo(byte[] src,byte[] dst){ for(int i=0;i<src.length/4;i+=4){ dst[i]=src[i]; dst[i+1]=src[i+1]; dst[i+2]=src[i+2];...原创 2019-05-02 13:58:09 · 197 阅读 · 0 评论 -
(七)对象内存布局--字段重排列
字段重排列,顾名思义,就是 Java 虚拟机重新排列字段的在内存中的顺序,以达到内存利用率最大,即减少内存填充。Java 虚拟机中有三种排列方法(对应 Java 虚拟机选项 -XX:FieldsAllocationStyle,默认值为 1),但都会遵循如下两个规则。其一、如果一个字段占据 C 个字节,那么该字段的偏移量需要对齐至 NC。这里偏移量指的是字段地址与对象的起始地址差值。以 lo...原创 2019-02-17 14:24:03 · 403 阅读 · 0 评论 -
(六)对象内存布局
Java 中创建对象的方式有多种:new 语句、反射机制、Object.clone 方法、反序列化以及 Unsafe.allocateInstance 方法来新建对象。其中,Object.clone 方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段。Unsafe.allocateInstance 方法则没有初始化实例字段,而 new 语句则是通过调用构造器来初始化实例字段: ...原创 2019-02-16 14:20:34 · 126 阅读 · 0 评论 -
(四)Java 虚拟机是如何加载Java类的?
类的加载过程类的整个加载过程从类字节流通过虚拟机的类加载器加载到内存供虚拟机使用,到垃圾收集器回收,其生命周期可分为加载、链接、初始化、使用、卸载。其中链接可分为验证、解析、准备,如下:加载加载是虚拟机借助类加载器查找字节流并且创建类的过程,从设计图(Class 结构文件)到产品实物(类)的过程。对于数组类来说,它并没有对应的字节流,而是由 Java 虚拟机直接生成的。 类加载...原创 2019-02-09 10:51:31 · 372 阅读 · 0 评论 -
(五)Java 的反射机制
反射是 Java 的一个重要特性,他不仅可以观测正在运行的程序,甚至动态修改其行为。举例来说,我们可以通过 Class 对象枚举该类中的所有方法,我们还可以通过 Method.setAccessible(位于 java.lang.reflect 包,该方法继承自 AccessibleObject)绕过 Java 语言的访问权限,在私有方法所在类之外的地方调用该方法。 @Calle...原创 2019-02-16 10:01:28 · 125 阅读 · 0 评论 -
(三)Java 的基本类型
基本类型Java 的基本类型包括整数类型 boolean 、byte、short、char、int 和 long,以及浮点类型 float 和 double。Java 的基本类型都有对应的值域和默认值。可以看到,byte、short、int、long、float 以及 double 的值域依次扩大,而且前面的值域被后面的值域所包含。因此,从前面的基本类型转换至后面的基本类型,无需强制转换。另外...原创 2019-01-16 11:13:25 · 487 阅读 · 0 评论 -
(二)Java 虚拟机具体是怎样运行 Java 字节码的?
Write Once,Run AnywhereJava 祖师爷就是由于发现用C++ 开发的过程中会花大量的时间处理内存、不同的指令架构等的问题,所以才有高“移植性”的Java 诞生。采访Java 祖师爷的报道链接。And there are a bunch of places in C, where it’s really easy to make errors that can...原创 2019-01-16 10:47:31 · 882 阅读 · 0 评论 -
Xcode 调试之 Hello World
编译编译JKD ,可以查看 Mac 编译 OpenJDK 8。调试 截图来自(https://segmentfault.com/a/1190000005082098)调试 Hello World . 编写好源文件public class Hello{ public stat...原创 2019-05-12 21:22:59 · 429 阅读 · 0 评论