简介
从事软件开发,分享包括但不限于“技术”、“运营”、“产品”等。 喜欢我的请关注微信公众号“ javaAnswer”,欢迎你的到来。
擅长的技术栈
可提供的服务
暂无可提供的服务
博文中的内容来源《深入理解Java虚拟机_JVM高级特性与最佳实践》这一本书,感激不尽。
验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。Java语言本身是相对安全的语言(依然是相对于C/C++),使用纯粹的Java代码无法做到诸如访问数组边界以外的数据、将一个对象转型为他并未实现的类型、跳转到不存在的代码行之类的事情,如果这样做了,编译器系那个拒绝编译。但前面已经...
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack...
博文中的内容来源《深入理解Java虚拟机_JVM高级特性与最佳实践》这一本书,感激不尽。
对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中描述是:所有的对象实例以及数组都要在堆上分配,但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化...
博文中的内容来源《深入理解Java虚拟机_JVM高级特性与最佳实践》这一本书,感激不尽。
jamp(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,要想获取Java堆转储快照,还有一些比较“暴力”的手段:譬如-XX : + HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX : +HeapDumpOnCtrlBreak...
Sun JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。不过实事求是地说,在实际工作中,除非受伤真的没有别工具可用,否则一般都不会去直接使用jhat命令来分析dump文件,主要原因有二:一是一般不会在部署应用程...
这个错误在JVM规范中是这样定义的: 如果Java虚拟机试图创建类ExceptionInInitializerError的新实例,但是因为出现Out-Of-Memory-Error而无法创建实例,那么就抛出OutOfMemoryError对象作为代替。 如果初始化器抛出一些Exception,而且Exception类不是Error或者他的某个子类,那么就会创建Exception...