深入分析java虚拟机
国家二级残序员
距离成功,只差一张500W的彩票
展开
-
Java内存区域
根据《Java 虚拟机规范(JavaSE7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。如下图(来自互联网)运行时数据区域Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有它们的生命周期(创建和销毁时间)。程序计数器程序计数器PCR(Program Counter Register)是一块非常小的内存空间,我们可以理解为它是当原创 2017-02-08 17:25:43 · 289 阅读 · 0 评论 -
使用volatile时,屏蔽了那些jvm优化?
前言Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论,但似乎讨论不出一个完美的结果,带着种种疑惑,准备从JVM、C++、汇编的角度重新梳理一遍。volatile的两大特性:禁止重排序、内存可见性,这两个概念,不太清楚的同学可以看这篇文章 -> java volatile关键字解惑概念是知道了,但还是很迷糊,它们到底是如何实现的?本文会涉及到一些原创 2017-12-27 17:14:59 · 454 阅读 · 0 评论 -
java volatile关键字解惑
前言看着上一篇的更新时间,发现已经挺长时间没有提笔了,只能以忙为自己开脱了,如果太闲都不好意思说自己是程序猿了,正好今天有人问了我一个问题:当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“, 这里的”保证“ 是如何做到的?和 JIT的具体编译后的CPU指令相关吧?最一开始碰到volatile,我的内心是拒绝的,因为当时做的项目中没有用到,也不清楚可以在什么场景下使用,转载 2017-12-27 17:09:43 · 239 阅读 · 0 评论 -
JAVA CAS原理深度分析
看了一堆文章,终于把JAVA CAS的原理深入分析清楚了。感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.转载 2017-05-05 15:21:03 · 316 阅读 · 0 评论 -
JVM中的哪些内存总和受到操作系统进程的最大内存限制?
1.Direct Memory 可通过vm参数:-XX:MaxDirectMemorySize调整大小,内存不足时抛出OutOfMemoryError或者OutOfMemoryError:Direct buffer memory。2.线程堆栈 可通过-Xss调整大小,内存不足时抛出StackOverflowError(纵向无法分配,即无法分配新的栈帧)或者OutOfMemoryError:un原创 2017-05-11 09:35:31 · 1695 阅读 · 0 评论 -
java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类.通过该实例的newInsta转载 2017-02-24 15:42:37 · 378 阅读 · 0 评论 -
新生代Eden与两个Survivor区的解释
文章出处:http://ifeve.com/jvm-yong-generation/聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,转载 2017-02-15 14:43:07 · 386 阅读 · 0 评论 -
垃圾收集器及GC参数
【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4748313.html 本文主要内容:堆的回顾串行收集器并行收集器CMS收集器 零、堆的回顾:新生代中的98%对象都是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是转载 2017-02-13 16:22:59 · 303 阅读 · 0 评论 -
GC算法和种类【重要】
【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4744233.html 本文主要内容:GC的概念GC算法 引用计数法(无法解决循环引用的问题,不被java采纳) 根搜索算法 现代虚拟机中的垃圾搜集算法:转载 2017-02-13 16:21:18 · 3063 阅读 · 0 评论 -
JVM内存结构
主要内容如下:JVM启动流程JVM基本结构内存模型编译和解释运行的概念 一、JVM启动流程:JVM启动时,是由java命令/javaw命令来启动的。二、JVM基本结构:JVM基本结构图:《深入理解Java虚拟机(第二版)》中的描述是下面这个样子的: Java中的内存分配:Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特转载 2017-02-13 16:19:42 · 252 阅读 · 0 评论 -
JVM常见问题总结
【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4810168.html 【正文】声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04—-GC算法和种类。那篇文章和本文是面试时的重点。转载 2017-02-13 16:16:16 · 482 阅读 · 0 评论 -
常用JVM配置参数
【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容:Trace跟踪参数堆的分配参数栈的分配参数 零、在IDE的后台打印GC日志:既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是转载 2017-02-13 15:59:41 · 913 阅读 · 0 评论 -
深入分析虚拟机在Java堆中对象分配、布局和访问的全过程
对象的创建—>虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能再常量池(方法区中)中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,必须先执行类的加载过程。—-> —>指针碰撞:如果Java堆中的内存是绝对规整的,所有用过的内存都放在一起,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪原创 2017-02-13 15:42:08 · 1193 阅读 · 0 评论 -
JVM相关面试题目
JVM 1. 详细jvm内存模型 2. 讲讲什么情况下回出现内存溢出,内存泄漏? 3. 说说Java线程栈 4. JVM 年轻代到年老代的晋升过程的判断条件是什么呢? 5. JVM 出现 fullGC 很频繁,怎么去线上排查问题? 6. 类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 7. 类的实例化顺序 8. JVM垃圾回收机制,何时触发MinorGC等操作 9原创 2018-05-03 14:34:46 · 289 阅读 · 0 评论