
JVM
文章平均质量分 83
HoiDev
这个作者很懒,什么都没留下…
展开
-
JVM之Java内存区域(一)
JVM构成JVM包括两个子系统和两个组件。两个子系统为: class loader(类装载)Execution engine(执行引擎)两个组件为: Runtime data area(运行时数据区)Native interface(本地接口)Class loader功能根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data are原创 2016-09-11 09:48:34 · 314 阅读 · 0 评论 -
JVM之锁的优化
自旋锁Spinning锁消除锁粗化轻量级锁偏向锁对象内存布局JDK 1.5 到 JDK 1.6的一个重要改进,便是高效并发。此时实现了各种锁优化技术,为了高效地在线程之间共享数据,解决竞争问题,从而提高执行效率。适应性自旋锁(Adaptive Spinning)锁消除(Lock Elimination)锁粗化(Locking Coarsening)轻量级锁(Lightweight原创 2016-09-22 00:57:20 · 609 阅读 · 0 评论 -
JVM之线程安全、原子性实现
定义线程安全2 状态依赖线程的安全度1 不可变Immutable2 绝对线程安全3 相对线程安全4 线程兼容5 线程对立实现线程安全的方法1 同步11 阻塞同步互斥同步12 非阻塞同步Java原子操作的实现13 无同步方案1.定义线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协原创 2016-09-22 00:50:59 · 1651 阅读 · 0 评论 -
JVM之线程实现
线程1 实现线程的方式11 使用内核线程实现12 使用用户线程实现13 用户线程加轻量级进程混合实现2 Java的线程实现并发不一定要依赖多线程,PHP中有多进程并发。但是,Java里面的并发是多线程的。1. 线程参考:Java多线程之基本概念线程是比进程更轻量级的调度执行单位。线程可以把一个进程的资源分配和执行调度分开。一个进程里可以启动多条线程,各个线程可共享该进程的资源(内存地址,文原创 2016-09-22 00:46:13 · 1802 阅读 · 0 评论 -
JVM之内存构成(二)--JAVA内存模型与并发
物理机中的并发硬件效率与一致性Java线程执行的内存模型工作内存主内存内存间交互long和double的非源自性协定Volatile类型变量的特殊规则和语义保证可见性禁止指令重排优化高效并发的原则可见性有序性和原子性先行发生Happens-Before这部分内容,跟并发有关我们知道,多任务处理,在现代操作系统几乎是必备功能。让计算机同时去做几件事情,不仅因为CPU运算能力太强大原创 2016-09-19 13:05:29 · 2721 阅读 · 1 评论 -
JVM之再谈类加载
类的生命周期加载Loading连接Linking验证Verification准备Preparation解析Resolution初始化Initialization类加载器类加载器类加载机制 总体上说,虚拟机把描述类的数据,从字节码文件加载到内存,然后进行数据校验、转换解析、初始化,最终形成可以被寻积极使用的Java类型,这就是虚拟机的类加载机制。与C/C++在编译时,需要连接不原创 2016-09-19 12:48:36 · 323 阅读 · 0 评论 -
JVM之执行引擎
运行时栈帧结构方法调用动态语言支持字节码解释执行引擎虚拟机是如何执行方法里面的字节码指令的基于栈的指令集和基于寄存器的指令集编译优化技术Javac编译过程分为哪些步骤即时编译器JIT热点代码优化技术类型代表性优化技术公共子表达式消除数组边界检查消除方法内联逃逸分析Java与CC编译器Execution Engine是虚拟机的核心组成之一虚拟机和物理机的区别是什么?这两原创 2016-09-19 12:16:15 · 5089 阅读 · 2 评论 -
JVM之类文件结构
Class类文件的结构魔数Magic Number与Class文件的版本Version常量池Constant Pool访问标志Access Flags类索引父类索引与接口索引集合This ClassSuper Class Interfaces字段表集合Fields方法表集合Methods属性表集合Attributes字节码指令加载和存储指令运算指令对象创建与访问指令操作数栈管原创 2016-09-17 11:42:51 · 362 阅读 · 0 评论 -
JVM之GC收集器
垃圾收集器Serial收集器Serial Old收集器ParNew收集器Parallel Scanvenge收集器Parallel Old收集器CMSConcurrent Mark SweepG1收集器GC收集器的选择吞吐量优先的并行收集器响应时间优先的并发收集器垃圾收集器串行收集器 Serial开头的 SerialSerial Old(MSC)并行收集器 Paralle原创 2016-09-11 10:02:22 · 2143 阅读 · 0 评论 -
JVM之Java类的加载
JVM和類調用java命令運行某個java程序時,該命令會啟動一個java虛擬機進程,這個JVM進程可以有多個綫程。同一個JVM的所有綫程、所有變量都處於同一個進程裏,它們都使用該JVM進程的內存區。以下狀況,JVM進程被終止: - 1. 程序運行到最後,正常結束 - 2. 程序運行到使用System.exit()或Runtime.getRuntime().exit()代碼處,結束程序 - 3原创 2016-08-07 16:08:57 · 315 阅读 · 0 评论 -
JVM之内存分配与回收策略
对象优先在 Eden 分配大对象直接进入老年代长期存活对象进入老年代动态对象年龄判定空间分配担保Java技术体系提倡的自动内存管理,最终,可以归结为自动化解决两个问题给对象分配内存回收分配给对象的内存给对象分配内存,大方向上,是在堆上分配,但也可能经过JIT编译后,被拆散为标量类型,并间接地栈上分配对象主要分配在新生代的Eden区域,如果启动了本地线程分配缓冲,将按线程,优先在Thr原创 2016-09-11 10:22:52 · 574 阅读 · 1 评论 -
JVM之GC算法和种类
垃圾收集算法可达性分析算法强引用StringReference软引用SoftReference弱引用WeakReference虚引用PhantomReference引用计数算法Reference Counting标记-清除算法Mark-Sweep复制算法Copying标记-整理Mark-Compact分代收集算法Generational CollectionHotSpot的算法实原创 2016-09-11 10:00:21 · 2859 阅读 · 0 评论 -
JVM之对象引用
强引用StringReference创建对象,并把对象赋给一个引用变量,程序通过这个引用变量来操作对象,对象和数组都采用了强引用。一个对象被一个或以上引用变量引用,则处于可达状态,不会被GC软引用SoftReference要用java.lang.ref.SoftReference实现内存空间足够时,不会被GC;否则,可能会被GC常用于对内存敏感的程序中get()获取引用的对象弱引用W原创 2016-09-11 09:58:39 · 279 阅读 · 0 评论 -
JVM之常用JVM配置参数
Trace跟踪参数-verbose:gc-XX:+printGC打印GC简要信息[GC (Allocation Failure) 3344K->1296K(9728K), 0.0004129 secs][GC (Allocation Failure) 3344K->1296K(9728K), 0.0003914 secs][GC (Allocation Failure) 3344K->1原创 2016-09-11 09:49:07 · 660 阅读 · 0 评论 -
JVM之内存中的对象模型
这里说HotSpot虚拟机中的对象转自这里:原文连接对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如下:java对象创建流程---1.加载---2.连接 | ---2.1验证 | --- 文件格式验证 --- 元数据转载 2016-09-22 01:01:07 · 361 阅读 · 0 评论