JVM总结
文章平均质量分 84
本人学习《深入理解JAVA虚拟机》的总结,欢迎大家交流学习和批评指正!
shu_lin
成长的路上,脚踏实地,一步步前进...
展开
-
JVM-内存分配与回收策略
JAVA技术体系中的自动内存管理实际上就是自动化的解决了给对象分配内存以及回收给对象分配的内存这两个问题。回收部分通过之前的《GC设计思路分析》和《垃圾收集器》这两篇博文进行了总结,那么接下来主要就是谈谈自己对JVM是如何给对象分配内存这一部分的理解。JVM的内存空间是有限的,并且堆内存是共享的,那么不同线程共用堆内存如何保证线程安全都是需要考虑的问题。 通过之前对JVM中的内存原创 2016-02-24 21:44:37 · 5018 阅读 · 1 评论 -
JVM-垃圾收集器
通过学习了解到现在商用的JVM中的垃圾收集采用的是分带收集算法,那么针对不同年代采用了不同的收集算法,从而在JVM发展的过程中,就产生了不同的垃圾收集器,一般分为新生代收集器和老年代收集器,两者相互组合进行GC操作(下图中相连的垃圾收集器表示可以相互组合,注意Serial Old和CMS也可以联合进行老年代的垃圾收集)。JDK6u14中开始测试的G1垃圾收集器,正式发布于JDK7u4中,是目前唯一原创 2016-01-31 15:25:18 · 5369 阅读 · 3 评论 -
JVM-GC设计思路分析
JAVA中将内存的控制交给JVM来实现,方便了JAVA程序猿,当然牺牲了一部分效率,不过总体来看是值得的。那么JVM中是如何设计GC的呢,本文从几个问题入手,然后分析了一下设计思路,如果有理解错误的地方,请批评指正!主要参考了《深入理解JAVA虚拟机》这本书,图是盗来的,图的内容和书上一样。 在JVM的内存模型中,堆内存是JAVA内存区域中最大的一部分,GC主要就是发生在堆中,用来回收那原创 2016-01-25 23:20:44 · 4386 阅读 · 1 评论 -
JVM-OutOfMemory异常重现
JVM中常见的OOM,那么如何通过自己编写代码产生这些OOM异常呢?通过写代码重现异常,是为了避免在工作中写出有OOM BUG的代码。之前虽然看过相关文章,但是没自己写过这些代码,这次在编写的实际过程中,由于和书本使用的JDK版本不一致,也会有点问题。其中印象最深刻的就是从JDK1.7开始常量池就已经不放在方法区了,而是改到了JAVA堆中,所以《深入理解JAVA虚拟机》中的有些知识也需要更新了。下面的代码基于JDK1.7来的。并且在运行程序的时候需要设置JVM参数,如果不设置,轻则需要等待很长时间才会出现异原创 2016-01-23 21:18:44 · 4053 阅读 · 0 评论 -
JVM-JAVA对象的访问
JAVA中对象的访问 JAVA是面向对象的语言,那么在JAVA虚拟机中,存在非常多的对象,对象访问是无处不在的。即时是最简单的访问,也会涉及到JAVA栈、JAVA堆、方法去这三个非常重要的内存区域之间的关联关系。 比如: Object obj = new Object(); 其中,“Object obj”这部分语义作为一个reference类型数据出现,原创 2016-01-03 17:05:23 · 4624 阅读 · 0 评论 -
JVM-内存模型
本篇其实就是一个读书笔记,书是《深入理解JAVA虚拟机》,在网上搜索JAVA内存,说的比较好的其实很多都源自这本书,作为一个JAVA程序员,理解虚拟机是通向高级程序员的必经道路。本篇中的图片源自当时网上,具体出处找不到了,请见谅。所谓的线程安全,其实就是不同线程对同一个资源的访问和修改引发的数据不一致问题。对于线程安全的理解,需要了解JVM中的内原创 2015-12-23 21:59:53 · 5407 阅读 · 3 评论