Redian新闻
>
關於JVM多線程的內存分配
avatar
關於JVM多線程的內存分配# Programming - 葵花宝典
b*u
1
新员工,我report给大老板,但是做的project是听二老板安排的
可是,我觉得二老板一直就很提防我,可能是我的实际背景和经验比他强
二老板总是给我一些比较一般的小project,不让我接触核心的东西。核心的东西他在做
这些小project,一般很快就做完了(不到1个月)。而且要等2-3个星期,二老板才会
给另外的project,之后我又能很快做完。
我感觉,用这些小project report给我的大老板,有点不够
我想做一些核心的东西,可是不知道怎么跟二老板提。
我是新员工,更是不敢跟大老板说二老板的不好。
我现在只能是,没事的时候自己学习一些新东西。
但我非常怕大老板年终review说我做的不够,给我差评。
请问,我是该听之任之,还是想办法改变现状?
avatar
m*p
2
我不知道我理解的對不對,請高手幫忙澄清:
JVM裡內存有兩種分配方式:
1. Java object分配內存,也就是java new,首先使用手動cpu優化版本的new:
hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp TemplateTable::_new()在TLAB
上分配;如果失敗,就去自動編譯的hotspot/src/share/vm/interpreter/
interpreterRuntime.cpp InterpreterRuntime::_new,這裡可能有鎖,性能低。而且
可以被GC回收,應該是managed內存。
2. JVM內部Cpp datastructure native memory allocation,一般C2 compiler做JIT時
需要分配內存,然後JVM會調用arena,arena裡面有chunkpool,裡面的chunk不夠用需
要重新分配時,會調用malloc,並用ThreadCritical的pthread_mutex_lock做保護。例
如:hotspot/src/share/vm/memory/allocation.cpp和hotspot/src/os/linux/vm/
threadCritical_linux.cpp。這個內存應該是unmanaged吧?有可能洩露。
我的問題是:這兩個內存分配用途不一樣吧?或者說Java new object永遠不會用第二
種arena的方式來分配?還是普通Java object在TLAB空間耗盡時會用cpp的arena分配
heap空間?
這個bug裡面的trace顯示arena都是jvm internal在用,不是java objects。
https://bugs.java.com/view_bug.do?bug_id=6302804
這個faq解釋了java heap和cpp arena同時被netty使用,但我還是有點不清楚,按理說
netty屬於java library啊,不應該用cpp arena啊。
https://cwiki.apache.org/confluence/display/FLINK/Netty+memory+allocation
avatar
m*u
3
I think you may over worried. Depends on your company size/culture, they may
want let you learn step by step, no big hurry. Once they feel more
comfortable with you, they will give you more important tasks. If you wear
their shoes for a minute, they won't want you make a silly mistake, and
cause some trouble for them and would not look good on you either. My
suggestion for going to new places is take it one step a time. Once you know
their problem and your capability/their skills, you will feel more
confident.

在做

【在 b*****u 的大作中提到】
: 新员工,我report给大老板,但是做的project是听二老板安排的
: 可是,我觉得二老板一直就很提防我,可能是我的实际背景和经验比他强
: 二老板总是给我一些比较一般的小project,不让我接触核心的东西。核心的东西他在做
: 这些小project,一般很快就做完了(不到1个月)。而且要等2-3个星期,二老板才会
: 给另外的project,之后我又能很快做完。
: 我感觉,用这些小project report给我的大老板,有点不够
: 我想做一些核心的东西,可是不知道怎么跟二老板提。
: 我是新员工,更是不敢跟大老板说二老板的不好。
: 我现在只能是,没事的时候自己学习一些新东西。
: 但我非常怕大老板年终review说我做的不够,给我差评。

avatar
m*p
4
又看了下,netty的arena chunkpool只是跟hotspot的名稱一樣而已,根本不是一回事
,忽略我關於netty的問題。
只剩下一個問題:java objects如果TLAB不夠用,在heap裡面會不會用jvm cpp arena
分配?
avatar
b*u
5
Thank you for your great comment!

may
know

【在 m*****u 的大作中提到】
: I think you may over worried. Depends on your company size/culture, they may
: want let you learn step by step, no big hurry. Once they feel more
: comfortable with you, they will give you more important tasks. If you wear
: their shoes for a minute, they won't want you make a silly mistake, and
: cause some trouble for them and would not look good on you either. My
: suggestion for going to new places is take it one step a time. Once you know
: their problem and your capability/their skills, you will feel more
: confident.
:
: 在做

avatar
y*u
6
不懂帮顶,爱你
avatar
m*o
7
jvm只有两种内存分配方式,onheap和offheap。后者实现一般用reflection来调用sun.
misc.Unsafe。没听说过netty调用offheap,这个要配和jvm argument -XX:
MaxDirectMemorySize 来预先分配offeap内存。
avatar
m*p
8
謝謝,我不明白的是java onheap new,如果TLAB不夠用,要不要經過內部arena的
chunkpool,還是直接就c malloc了?如果不用chunkpool,是不是malloc調用會很頻繁
,性能低下?
netty那段我看錯了,跟netty無關,只是關鍵詞一樣都叫arena和chunkpool,但是是
java實現,跟jvm裡面的cpp實現無關。
還有一個,jvm c2 compiler在JIT的時候也需要分配heap內存,這個算onheap還是
offheap呢?感覺跟普通java object走的路徑不一樣。

sun.

【在 m****o 的大作中提到】
: jvm只有两种内存分配方式,onheap和offheap。后者实现一般用reflection来调用sun.
: misc.Unsafe。没听说过netty调用offheap,这个要配和jvm argument -XX:
: MaxDirectMemorySize 来预先分配offeap内存。

avatar
m*p
9
剛剛又看了一下,JVM內存不只有兩種方式:
1. heap,由GC管理
2. metaspace,不由GC管理
3. thread stack
4. code cache
5. GC internal (Hot Card)
6. compiler (C1 / C2)
7. internal -> 這個是重點,啥算internal,我發現我測試的internal有點大
8. symbol space
這裡面哪個用arena,哪個不用?估計java object不用arena管理,但不確定
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。