自学内容网 自学内容网

jvm笔记

方法区:存放类信息,常量,static变量,字节码,类加载器

方法区和堆为线程共享,其余为线程私有

运行时常量池:字段,方法,接口等描述信息

对象的创建

        指针碰撞和空闲列表,都有并发问题,可以通过同步或TLAB,每个线程都分块地方,各自忙自己的

对象头

        存储哈希码,gc年龄,锁标记

不同的锁标志位,会导致32bit的数据展示的不一样,对象的hashcode在其他锁状态没有是因为存到其他地方了

创建对象

        创建对象有直接指针和句柄两种

        句柄

     句柄好处是比较规整,当数据移动后改个指针地址就可以了

         直接指针

         直接指针少了一些性能开销,但是直接操作堆内存,增加了一层风险

垃圾收集

        哪些内存要回收,什么时候回收,怎么回收

引用计数法,可达性分析法

        GCRoot:类变量,常量,锁对象,局部变量,类加载器,代码缓存

        强软弱虚:

                强,引用关系存在就不会回收,甚至报错也不清除。

                软,要发生内存问题就回收,用SoftReference创建。

                弱,下次垃圾回收就回收掉,WeakReference创建

                虚,多一个标记,最弱的引用关系

回收方法区

        所有实例都被回收

        对应的类加载器被回收

        无法反射获取

垃圾收集算法

        强分代:越从垃圾收集下活下来,越难被回收

        弱分代:大部分对象朝生夕灭,都是没

        跨引代:跨代引用相对于同代引用来说仅占极少数

记忆集:将老年代存在跨代引用的加入记忆集,垃圾回收找记忆集,不用再遍历老年代。减少性能开销

        标记清除算法

                遍历对象,标记活下来的对象,删除其余对象。

                        碎片化问题,如果标记“该死”对象,性能消耗大

                

        标记复制算法

                内存分一半,只操作一半内存的数据,标记活下来的放到另一半内存,原先内存数据全部删除

                内存使用效率低,简单

                优化:修改比例,两个存活的区域和新生区域1:1:8

                         标记整理算法

        标记活着的,统一放到一块地方,删除其他的。

                如果对象存活的多,总是移来移去,“拖家带口”性能消耗大


原文地址:https://blog.csdn.net/a624135_/article/details/142859453

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!