Java中怎么为对象创建分配内存,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1、指针碰撞
假设java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针做为分界点的指示器,那对象所分配的内存就仅仅是把那个指针向空闲空间挪动一段与对象大小相等的距离
2、空闲列表
如果java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那虚拟机就必须维护一个列表,记录上哪些内存是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录
并发情况下,线程是不安全的,可能出现正在给对象A分配内存,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的情况。
解决方案:
1、CAS 虚拟机采用CAS + 失败重试的方式保证更新操作的原子性
2、本地线程分配缓存(TLAB) 即每个线程预先在堆中分配一小块内存,哪个线程要分配内存,就在哪个线程的TLAB上分配,只有TLAB用完并分配新的TLAB时,才会需要使用1方式 。 虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB参数来设定。
关于Java中怎么为对象创建分配内存问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。