随笔分类 -  jvm

摘要:Java 并发编程(1): Java 内存模型(JMM) as-if-serial 语义 数据依赖性 从JAVA 源代码到最终实际执行的指令序列, 会经历3种重排序: 1 属于编译器重排序, 2和3 属于处理器重排序. JMM 的设计初衷 程序员希望内存模型易于理解和编程, 所以需要一个强内存模型. 阅读全文
posted @ 2018-03-22 00:03 假程序猿 阅读(910) 评论(0) 推荐(0) 编辑
摘要:说一说Java的Unsafe类 Unsafe类提供了以下这些功能: 一、内存管理。包括分配内存、释放内存等。 二、非常规的对象实例化。 三、操作类、对象、变量。 四、数组操作。 五、多线程同步。包括锁机制、CAS操作等。 六、挂起与恢复。 七、内存屏障。 阅读全文
posted @ 2018-03-20 22:18 假程序猿 阅读(178) 评论(0) 推荐(0) 编辑
摘要:JVM内存模型、指令重排、内存屏障 概念解析 1,指令重排序 2,as-if-serial语义 ps:即指令好像是连续的,是对这种执行效果特性的一个说法。 为了保证这一语义,重排序不会发生在有数据依赖的操作之中。 3,内存访问重排序与内存可见性 4,内存访问重排序与Java内存模型 根据Java内存 阅读全文
posted @ 2018-03-20 21:48 假程序猿 阅读(2512) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/column/details/talk-about-jvm.html 阅读全文
posted @ 2018-03-20 14:20 假程序猿 阅读(76) 评论(0) 推荐(0) 编辑
摘要:JVM高级特性与实践(五):实例探究Class类文件 及 常量池 JVM高级特性与实践(六):Class类文件的结构(访问标志,索引、字段表、方法表、属性表集合) JVM高级特性与实践(七):九大类字节码指令集(实例探究 ) 阅读全文
posted @ 2018-03-11 12:09 假程序猿 阅读(94) 评论(0) 推荐(0) 编辑
摘要:JVM高级特性与实践(四):内存分配 与 回收策略 一. 内存分配 和 回收策略 1,对象内存分配的概念: 往大方向讲,它就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配), 对象主要分配在新生代的Eden区上,如果启动了局部线程分配缓冲,将按线程优先在TLAB上分配。 少数 阅读全文
posted @ 2018-03-10 14:54 假程序猿 阅读(168) 评论(0) 推荐(0) 编辑
摘要:TLAB(Thread Local Allocation Buffer) 1,堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的 2,Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(T 阅读全文
posted @ 2018-03-08 17:54 假程序猿 阅读(4361) 评论(0) 推荐(2) 编辑
摘要:JVM的Client模式与Server模式 JVM有两种运行模式Server与Client。 两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢; 但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。 这是因为Server模式启动的JVM采用的 阅读全文
posted @ 2018-03-08 17:00 假程序猿 阅读(1787) 评论(0) 推荐(1) 编辑
摘要:java内存模型和线程规范 JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现 大致知识点如下: 4种垃圾收集算法概念的学习 7种垃圾收集器特征的学习 一. 垃圾收集算法 1. 标记-清除算法(Mark-Sweep) 算法分成“标记”、“清除”两个阶段:首先标记出所有需要回收的对象,在标记 阅读全文
posted @ 2018-03-08 10:56 假程序猿 阅读(330) 评论(0) 推荐(0) 编辑
摘要:新生代内存分区 1,为什么需要把堆分代? 分代的唯一理由就是优化GC性能 如果没有分代,所有的对象都在一块,GC的时要找到哪些对象是没用的,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的。 如果分代的话,把新创建的对象放到某一地方,当GC的时先把这块存“朝生夕死”对象的区域进行回收, 阅读全文
posted @ 2018-03-07 17:54 假程序猿 阅读(4291) 评论(0) 推荐(0) 编辑
摘要:多态性实现机制——静态分派与动态分派 阅读全文
posted @ 2018-03-06 17:56 假程序猿 阅读(143) 评论(0) 推荐(0) 编辑
摘要:Javac编译与JIT编译 简介: 一,编译过程: 大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现。 上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript), 阅读全文
posted @ 2018-03-06 13:28 假程序猿 阅读(14728) 评论(0) 推荐(3) 编辑
摘要:JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收 垃圾回收器GC(Garbage Collection) GC需要完成的3件事情: 内存的动态分配与内存回收机制似乎“自动化”起来。 了解GC和内存分配等底层知识目的: 一,Java内存运行时区域的各个部分: 每一个栈帧中分配的内存基本上 阅读全文
posted @ 2018-03-05 21:50 假程序猿 阅读(495) 评论(0) 推荐(0) 编辑
摘要:基本数据类型由于长度固定,且需要空间比较少,所以直接存储在栈中;而对象比较大,所以栈中只存储一个4btye的引用地址(逻辑地址)。 java中对String对象特殊对待,所以在heap区域分成了两块: PS:字符串常量池,应该只是运行时常量池的一块区域。此外整型(只有0-127)也在常量池中。 而s 阅读全文
posted @ 2018-03-04 20:31 假程序猿 阅读(4581) 评论(0) 推荐(0) 编辑
摘要:jvm内存结构回顾: 1 . 程序计数器 JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的 2 . Java虚拟机栈 局部变量表中存放了编译期可知的类型。 因为类型可知,帧中分配多大的局部变量空间是完全确定的,在方法运行期间局部变量表的大小也不变。 出现的异常: 3 . 本地方法栈 阅读全文
posted @ 2018-03-04 19:27 假程序猿 阅读(2907) 评论(1) 推荐(2) 编辑
摘要:JVM调优总结 -Xms -Xmx -Xmn -Xss jvm 内存 在不同的情况下如何增大 及 PermGen space 相关 JVM日志和参数的理解 JVM崩溃Log日志分析 堆和非堆 直接内存(Direct Memory) 在JDK 1.4 中新加入了NIO(New Input/Output 阅读全文
posted @ 2018-03-03 11:34 假程序猿 阅读(2844) 评论(0) 推荐(0) 编辑
摘要:简介: 1,java.lang.ClassLoader类介绍 主要方法: ps: 2,类加载器的树状组织结构 每个 Java 类都维护着一个指向定义它的类加载器的引用,通过 getClassLoader()方法就可以获取到此引用。 通过递归调用 getParent()方法来输出全部的父类加载器。 没 阅读全文
posted @ 2018-03-02 19:43 假程序猿 阅读(1274) 评论(0) 推荐(0) 编辑
摘要:通过AccessController看Java安全模型 阅读全文
posted @ 2018-03-02 13:40 假程序猿 阅读(172) 评论(0) 推荐(0) 编辑
摘要:深入理解Java对象的创建过程:类的初始化与实例化 对象实例化内存分析: 对内存分配情况分析最常见的示例便是对象实例化: 这段代码的执行会涉及java栈、Java堆、方法区三个最重要的内存区域。 该语句出现在方法体中,obj会作为引用类型(reference)的数据保存在Java栈的本地变量表中,在 阅读全文
posted @ 2018-03-02 13:33 假程序猿 阅读(145) 评论(0) 推荐(0) 编辑
摘要:java中的安全模型(沙箱机制) java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(二)之.class文件检验器 java安全沙箱(二)之.class文 阅读全文
posted @ 2018-02-28 17:38 假程序猿 阅读(359) 评论(0) 推荐(0) 编辑