深入理解虚拟机
→思
这个作者很懒,什么都没留下…
展开
-
StackOverflowError与OutOfMemoryError异常
一、StackOverflowError抛出这个错误是因为线程请求的栈深度大于虚拟机所允许的深度,因为Java线程操作是基于栈的,当调用方法内部方法也就是进行一次递归的时候,就会把当前方法压入栈直到方法内部的方法执行完全之后,就会返回上一个方法,也就是出栈操作执行上一个方法。比如如下代码会抛出StackOverflowError异常public class StackOverflowTest...原创 2019-03-25 11:24:59 · 205 阅读 · 0 评论 -
Java虚拟机运行时数据区
一、运行时数据区总览Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。二、程序计数器程序计数器是一快较小的内存空间,它可以看做是当前栈所执行字节码的行指示器。在虚拟机的概念模型中,字节码解释器的工作就是通过改变这个计数器的...原创 2019-03-25 13:36:37 · 182 阅读 · 0 评论 -
GC回收对象算法(GC Root和引用链)
可达性分析算法在主流的商用程序语言(Java、C#,甚至包括前面提到的古老的Lisp)的主流实现中,都是称通过可达性分析(Reachability Analysis)来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相...转载 2019-03-31 11:40:55 · 2110 阅读 · 0 评论 -
Safepoint
为什么需要safepoint很明显safepoint是个让人不开心的东西, 线程都干不了活了, 怎么搞生产? 存在是因为需要, 我们知道java在语言级别提供了线程支持, 每个线程都是独立的执行单元. 堆里对象的引用关系抽象出来就是一副有向图(Directed graph), 图中的节点就是对象, 该对象被其他对象引用可以用该对象的入度(indegree)表示, 而对象的出度(outdegree...转载 2019-04-01 19:38:49 · 203 阅读 · 0 评论 -
java中对象的访问定位
java中对象的访问定位建立对象是为了使用对象,我们java程序员需要通过虚拟机栈中的reference来访问对象,但是虚拟机的规范中只规定了一个指向对象的指针,并没有规定以哪种方式去定位、访问对象在堆中的具体位置。所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中...原创 2019-03-28 19:23:43 · 172 阅读 · 0 评论 -
GC日志参数详解
一、输出GC简要信息-verbose:gc 或-XX:+PrintGC[GC (Allocation Failure) 7987K->5378K(19456K), 0.0133927 secs][GC (Allocation Failure) 13570K->11246K(19456K), 0.0220739 secs][Full GC (Ergonomics) 11...转载 2019-03-29 13:36:01 · 1228 阅读 · 0 评论