【深入理解Java虚拟机】教程文章相关的互联网学习教程文章

深入理解java虚拟机——读后笔记(一)(内存部分)

一、内存区域的划分(运行时数据区域)  ①程序计数器:程序计数器是一块较小的内存区域,字节码解释器通过改变此计数器的值来选取下一条要执行的字节码指令,可以看成是当前线程执行字节码的行号指示器。线程执行时的分支、循环、跳转、异常处理、线程恢复等功能都依赖它。每条线程拥有独立的程序计数器,互不影响,独立储存。此区域没有OutOfMemory。  ②Java虚拟机栈:虚拟机栈也是线程私有内存区域,生命周期和线程相同。每...

深入理解Java虚拟机(四) 垃圾回收机制【图】

Write Once Run Anywhere,一次编写多处运行一、判断垃圾的方法Java判断垃圾的算法主要是以下两种:  引用计数算法给对象中添加一个引用计数器,当有一个地方引用它,计数器加1,当引用失效,计数器减1,任何时刻计数器为0的对象就是不可能再被使用的 。实现非常简单。没办法解决循环引用问题。比如:对象A有一个引用指向B对象,B也有一个引用指向A,如果A和B都没有被其他对象引用,其实已经是垃圾,但是没办法回收。并不实用,几...

什么是HotSpot VM & 深入理解Java虚拟机【代码】

参考 http://book.2cto.com/201306/25434.html另外,这篇文章也是从一个系列中得出的: 《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》 http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M。。) /Users/baidu/Documents/Data/Interview/JavaHotSpot提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。但不一定所有人都知道的是,这个目前看...

深入理解java虚拟机【垃圾回收算法】

Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器...

(转)《深入理解java虚拟机》学习笔记3——垃圾回收算法

Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器...

《深入理解java虚拟机》 精华总结(面试)

《深入理解java虚拟机》 精华总结(面试)本文转载: Wuuboy 一、运行时数据区域Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、本地方法栈、堆、程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区1.1 程序计数器程序计数器是一块较小的内存,他可以看做是当前线程所执行的行号指示器。字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支、...

深入理解Java虚拟机笔记---字段表集合【图】

字段表(field_info)用于描述接口或类中声明的变量。字段(field)包括了类级变量或实例变量,但不包括方法内部声明的变量。描述一个字段的信息有:字段的作用域(public,private,protected修饰符),是类级变量还是实例级变量(static修饰符),可变性(final),并发可见性(volatile修饰符,是否强制从主内存读写),是否可序列化(transient修饰符),字段数据类型(基本数据类型,对象,数组),字段名称。这些信息中,各个修改符都是布尔值,...

深入理解Java虚拟机

http://blog.csdn.net/coslay/article/details/48932277http://blog.csdn.net/qilixiang012/article/category/2857451http://blog.csdn.net/u010010428/article/details/51886237http://blog.csdn.net/u010010428/article/category/6301668原文:http://www.cnblogs.com/zengkefu/p/6910708.html

【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

我为什么喜欢Java,另重要原因就是跨平台,就是WORA。  程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机。?Tip  Java生态中的语言有很多,处理Java本身还有Scala、Groovy和Jruby。然而虚拟机只管跟底层操作系统打交道,对上层它只认字节码。那么跟各种语言打交道的就是翻译家—编译器。字节码的载体就是.class文件。  字节码,是以8个字节为单位的二进制文件,整个文件中排列紧凑,从头到尾不含一...

深入理解Java虚拟机-垃圾收集算法【代码】【图】

一、判断对象是否可进行回收1.引用计数算法  给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。但是主流的Java虚拟机里面没有选用引用计数算法来管理内存,最主要的原因是它很难解决对象之间相互循环引用的问题。代码示例如下:publicclass JVMTest {private JVMTest jvmTest = null;publicstaticvoid main(String[] args) {JVM...

《深入理解JAVA虚拟机》JDK的垃圾收集算法

概念垃圾收集是很多使用JAVA语言的IT从业者了解得比较少的地方。但是涉及性能时非常重要。大公司面试除了算法,这部分也是会经常考察的地方。《深入理解JAVA虚拟机》一书中讲到JVM的垃圾收集算法和垃圾收集器。 垃圾收集算法分为:1、标记清除算法通常用在回收老年代内存。最早的搜集算法就是标记清除(Mark-Sweep)算法了。其原理是分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。...

《深入理解 Java 虚拟机》读书笔记:Java 内存模型与线程【图】

正文由于计算机的处理器运算速度与它的存储和通信子系统速度的差距太大了,大量的时间都花费在磁盘 I/O、网络通信或者数据库访问上,导致处理器在大部分时间里都处于等待其他资源的状态。因此,为了充分利用计算机的处理器运算能力,现代计算机操作系统采用了多任务处理的方式,即让计算机并发处理多个任务。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然就会越高;反之,线程之间频繁阻塞甚至死锁,将会大大降低...

《深入理解Java虚拟机》第二部分(7)【代码】

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,从大方向上将,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况也可能直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃...

JVM内存结构---《深入理解Java虚拟机》学习总结【图】

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域的用途各不相同,同时也依据着各自的执行规则,独立的创建和销毁数据。虚拟机内存的划分,如图所示:线程之间互相独立的区域有:虚拟机栈 、本地方法栈、程序计数器线程可以共享数据的区域:方法区 、堆每个区域的作用分别如下:程序计数器 Program Counter Register:众所周知,虚拟机处理多线程时,是通过轮流的切换线程,来获取cpu的执...

深入理解Java虚拟机(笔记)

内存分配:  为对象分配内存有两种方式,第一种是“指针碰撞”,也就是把内存分为两边,一边是已使用区域,另一边是未分配区域,分界线用指针记录,当要分配内存时,只需把指针向未分配区域移动需要的空间即可,通常compact算法的垃圾回收会使用“指针碰撞”,如Serial、ParNew;另一种是空闲列表记录,也就是分配是可以不连续的,中间很多间隔可用的未分配内存,这个时候需要一个列表来对内存进行记录,分配内存时候就在列表找到...