
jvm
文章平均质量分 82
gwt0425
这个作者很懒,什么都没留下…
展开
-
Java虚拟机(1)
Java内存区域程序计数器(Program Counter Register):记录当前线程所执行字节码的行号指示器。字节码解释器工作时,判断是循环,分支,跳转,异常等条件,然后更新这个计数器的值来选取下一条要执行的指令。这个部分是线程私有的,各线程之间不会相互影响Java虚拟机栈(JVM Stacks):是Java方法执行的内存模型,每个方法在执行中会创建一个栈帧,用于存储局部变量表,操作数原创 2017-09-14 15:59:48 · 347 阅读 · 0 评论 -
《Optimizing Java》读书笔记中
开头吐槽一句:当初被Java骗的呀,什么自动内存管理,到头来还是都要学的。还不如直接去学C++呐。第六章:理解垃圾收集标记-清除for each object in allocatedObjectList: clearing the mark bit // 所以对象是8字节的倍数,遍历还可以跳着来DFS starting from GC-Roots: set the reac原创 2018-02-17 15:05:14 · 1652 阅读 · 0 评论 -
《Optimizing Java》读书笔记上
第一章:性能与优化定义* JVM上没有“一键变快”的开关* 没有小技巧能使Java运行变快* 没有对程序员隐藏的神秘算法性能是实验科学定义期待的性能结果测量现有的系统性能决定要优化什么才能达到目标实现它重新测试判断是否得到目标性能分类Throughput-吞吐量Latency-延迟:Capacity-容量Utilization-利用率Efficiency-效率Scalabi原创 2018-02-08 14:58:17 · 1125 阅读 · 0 评论 -
理解JVM(6)Class装载系统
Class文件的装载流程类装载的条件(主动使用)创建一个实例,使用new,或者反射,序列化,克隆当调用类的static方法,使用了invokestatic指令使用了类或接口的static字段,使用了getstatic或putstatic指令,但final static的字段除外,这是常量池里的使用反射,反射类的方法时当初始化子类时,要先初始化其父类有启动虚拟机的main()方法的那个类原创 2017-10-04 17:03:58 · 472 阅读 · 0 评论 -
理解JVM(5)锁
对象头和锁JVM的实现中,每个对象都有一个对象头,用于保存对象的系统信息。对象头中有一个Mark Word部分,里面存放对象的哈希值,对象的年龄,锁的指针,是否占用锁,哪个锁等信息在32位系统中,Mark Word占32位,这是小端储存,从右往左看。默认状态下,对象前2位总是状态位,第三位表示是否是偏向锁,看得到不是一定有的。无锁,第4-6位会存放对象年龄,8-32位放Hash值。// 32 bi原创 2017-10-03 14:59:04 · 551 阅读 · 0 评论 -
理解JVM(4)垃圾回收
常用的垃圾回收算法引用计数法:优点:简单缺点:循环引用问题,引用产生消除时进行加减标记清除法:在标记阶段,通过根节点标记所有可达的对象;在清除阶段,清除所有未被标记的对象。缺点:回收后空间不连续,产生空间碎片,对于大对象会降低工作效率复制算法:将内存空间分为2块,每次使用一块,在垃圾回收时,将正在使用内存中的存活对象复制到未使用的一块中,清除这块的所有对象缺点:内存被折半了在Java的原创 2017-09-29 19:49:48 · 257 阅读 · 0 评论 -
理解JVM(3)虚拟机参数
跟踪垃圾回收:-XX:+PrintGC ->简单GC日志-XX:+PrintGCDetails ->详细GC日志-XX:+PrintHeapAtGC ->会在每次GC前后分别打印堆信息-XX:+PrintGCTimeStamps ->每次GC发生后,输出GC的发生时间-XX:+PrintGCApplicationC原创 2017-09-28 16:13:12 · 283 阅读 · 0 评论 -
理解JVM(2) 栈内存,方法区,堆内存
堆,方法区,栈的关系分配最大堆内存-Xmx32mclass SimpleHeap(val id: Int){ fun show() = println("My id is $id")}fun main(args: Array<String>) { val s1 = SimpleHeap(1) val s2 = SimpleHeap(2) s1.show() s原创 2017-09-18 11:47:01 · 660 阅读 · 0 评论 -
同步和Java内存模型 --By Doug Lea
综述先来看如下这个简单的Java类,该类中并没有使用任何的同步。final class SetCheck { private int a = 0; private long b = 0; void set() { a = 1; b = -1; } boolean check() { return ((b =转载 2017-09-24 12:59:57 · 239 阅读 · 0 评论 -
Java内存模型--By William
什么是内存模型转载自http://ifeve.com/memory-model/在多核系统中,处理器一般有一层或者多层的缓存,这些的缓存通过加速数据访问(因为数据距离处理器更近)和降低共享内存在总线上的通讯(因为本地缓存能够满足许多内存操作)来提高CPU性能。缓存能够大大提升性能,但是它们也带来了许多挑战。例如,当两个CPU同时检查相同的内存地址时会发生什么?在什么样的条件下它们会看到相同的值?在处转载 2017-09-24 12:23:48 · 375 阅读 · 0 评论 -
如何降低Java GC的开销
前言堆中存放对象,栈中存放基本类型和堆中对象的引用一个Object对象占用4+8bytes, 4bytes是栈中的引用,8bytes是堆中对象的实际大小。如果这个对象有个long属性,其大小为8+4+8bytes,但是对象必须是8的倍数,所以会补齐为24bytes.JVM中分年轻代,老年代,永久代;其中年轻代有1个Eden和2个Survivor区。新生代GCvs老年代GC新对象在eden区申请空间失原创 2018-02-08 16:56:48 · 426 阅读 · 0 评论