面试官问我:你确定JVM堆内存是共享的?

大鱼仙人

共 5306字,需浏览 11分钟

 ·

2021-04-12 21:15



前言

这应该是大鱼写的RocketMQ的第5篇文章了,之前四篇分别是

我们在之前一篇关于JVM内存结构中,介绍了两个比较常见的区域是堆内存和栈内存,堆和栈的区别,大家应该也听得耳朵都出茧子了

堆是线程共享的内存区域,栈是线程独享的内存区域;堆中主要存放的是对象实例,栈中存放的是各种基本数据类型和对象的引用

但是呢,大鱼前几天去面试,面试官也问了我这个问题,而且没有就此罢休,而是问了我很多平时遇不到的问题,不过好在大鱼我曾经在看某一技术博主的文章的时候,跟着多学习了下

Java线

let me tell you

TLAB

就是多个线程在堆上同时申请空间,如果在并发的场景中,两个线程先后把对象引用指向了同一个内存区域,那可能就会出现问题为了解决这个问题呢,就得进行同步控制,说到同步控制,就会影响到效率

Hotspot线TLAB

TLAB线线TLAB

TLAB线访线

TLAB

TLAB线线TLAB100KB使80KB30KBTLAB

  • TLABTLAB

实这两种方案

TLAB1KBTLABTLAB

refill_waste

refill_wasterefill_wasteTLABTLAB

Java

,那这是

JVMJava JIT

访线

访

访

 or 

public StringBuilder getBuilder1(String a, String b) {
StringBuilder builder = new StringBuilder(a);
builder.append(b);
// builder
return builder;
}
public String getBuilder2(String a, String b) {
StringBuilder builder = new StringBuilder(a);
builder.append(b);
// builder
return builder.toString();
}


getBuilder1buildergetBuilder2buildertoStringnewString

-Xms10m -Xmx10mGC

public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
for
(int i = 0; i < 10000; i++) {
allocate();
}
System.out.println((System.currentTimeMillis() - start) + <span data-raw-text="" "="" data-textnode-index="156" data-index="3462" class="character">" ms<span data-raw-text="" "="" data-textnode-index="156" data-index="3466" class="character">"
);
Thread.sleep(10000);
}
public static void allocate() {
MyObject myObject = new MyObject(2019, 2019.0);
}
public static class MyObject {
int a;
double
b;
MyObject(int a, double b) {
this.a = a;
this
.b = b;
}
}

JVMintlongreference

JavaintlongreferenceJava

访使

便

MyObjectabJVMmyObjectallocate()myObjectab

static void allocate() {
int a = 2019;
double
b = 2019.0;
}


intdouble

emmm使

JVM:JavaJIT


线线线访线线

public synchronized String append(String str1, String str2) {
StringBuffer sBuf = new StringBuffer();
// append
sBuf.append(str1);
sBuf.append(str2);
return
sBuf.toString();
}

appendsynchronized线线StringBuffer使

javaserverserverclient

便

-XX:+DoEscapeAnalysisjdk1.8-XX:-DoEscapeAnalysis 

-XX:+EliminateLocksjdk1.8-XX:-EliminateLocks 

-XX:+EliminateAllocationsjdk1.8-XX:-EliminateAllocations 

好了,大鱼,今天面试暂时先到这里,明天下午继续来这里二面吧

好的,亲爱的面试官,今天和您聊得也很开心,我也收获颇多

我家里的小米粥也熬好了快,我就先拜拜了~

 


求赞



 

好了,以上就是全部内容了,我是小鱼仙,你们的学习成长小伙伴

                             

我希望有一天能够靠写字养活自己,现在还在磨练,这个时间可能会有很多年,感谢你们做我最初的读者和传播者。请大家相信,只要给我一份爱,我终究会还你们一页情的。

再次感谢大家能够读到这里,我后面会持续的更新技术文章以及一些记录生活的灵魂文章,如果觉得不错的,觉得大鱼同学有点东西的话,求点赞、关注、分享三连

哦,对了!后续的更新文章我都会及时放到这里,欢迎大家点击观看,都是干货文章啊,建议收藏,以后随时翻阅查看

https://github.com/DayuMM2021/Java

 

推荐阅读


● 面试官问我:你确定用了BigDecimal后,计算结果一定精确?

   ● 这个GitHub地址,真香

● 消息队列入门

   ● 搞懂什么是RocketMQ




浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报