Shared Between Threads
Heap
Heapμ λ°νμμ ν΄λμ€ μΈμ€ν΄μ€μ λ°°μ΄μ ν λΉνλ λ° μ¬μ©λ©λλ€. Frameμ μμ±λ ν ν¬κΈ°κ° λ³κ²½λλλ‘ μ€κ³λμ§ μμκΈ° λλ¬Έμ λ°°μ΄κ³Ό κ°μ²΄λ stackμ μ μ₯ν μ μμ΅λλ€. νλ μμ heapμ κ°μ²΄ λλ λ°°μ΄μ κ°λ¦¬ν€λ μ°Έμ‘°λ§ μ μ₯ν©λλ€. λ‘컬 λ³μ λ°°μ΄(κ° frameμμ)μ κΈ°λ³Έ λ³μ λ° μ°Έμ‘°μ λ¬λ¦¬ κ°μ²΄λ νμ νμ μ μ₯λλ―λ‘ λ©μλκ° μ’ λ£λ λ μ κ±°λμ§ μμ΅λλ€. λμ κ°μ²΄λ garbage collectorμ μν΄μλ§ μ κ±°λ©λλ€.
garbage collectionμ μ§μνκΈ° μν΄ νμ μΈ λΆλΆμΌλ‘ λλ©λλ€.
Young Generation
μ’ μ’ Edenκ³Ό Survivorλ‘ λλ©λλ€.
Old Generation
Tenured Generationμ΄λΌκ³ λ ν¨
Permanent Generation
Memory Management
κ°μ²΄ λ° λ°°μ΄μ garbage collectorκ° μλμΌλ‘ νμνλ λμ λͺ μμ μΌλ‘ ν λΉ ν΄μ λμ§ μμ΅λλ€.
μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΄ μλν©λλ€.
μλ‘μ΄ κ°μ²΄μ λ°°μ΄μ΄ young generationμ μμ±λ©λλ€.
Minor garbage collectionμ young generationμμ μλν©λλ€. μμ§ μ΄μμλ κ²μ²΄λ eden 곡κ°μμ survivor 곡κ°μΌλ‘ μ΄λλ©λλ€.
μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ threadλ₯Ό μΌμ μ€μ§μν€λ Major garbage collectionμ μΈλ κ°μ κ°μ²΄λ₯Ό μ΄λν©λλ€. μμ§ μ΄μμλ κ°μ²΄λ young generationμμ old(tenured) generationλ‘ μ΄λλ©λλ€.
Permanent generationλ old generationκ° μμ§λ λλ§λ€ μμ§λ©λλ€. λ μ€ νλκ° κ°λ μ°¨λ©΄ λ λ€ μμ§λ©λλ€.
Non-Heap Memory
λ Όλ¦¬μ μΌλ‘ JVM λ©μ»€λμ¦μ μΌλΆλ‘ κ°μ£Όλλ κ°μ²΄λ Heapμ μμ±λμ§ μμ΅λλ€.
non-heap λ©λͺ¨λ¦¬μλ λ€μμ΄ ν¬ν¨λ©λλ€.
Permanent Generation
the method area
interned strings
Code Cache
JIT μ»΄νμΌλ¬μ μν΄ native μ½λλ‘ μ»΄νμΌλ λ©μλμ μ»΄νμΌ λ° μ μ₯μ μ¬μ©
Just In Time (JIT) Compliation
Java λ°μ΄νΈ μ½λλ ν΄μλμ§λ§ JVMμ νΈμ€νΈ CPUμμ native μ½λλ₯Ό μ§μ μ€ννλ κ²λ§νΌ λΉ λ₯΄μ§λ μμ΅λλ€. μ±λ₯μ ν₯μμν€κΈ° μν΄ Oracle Hotspot VMμ μ κΈ°μ μΌλ‘ μ€νλλ λ°μ΄νΈ μ½λμ "ν«" μμμ μ°Ύκ³ μ΄λ₯Ό λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌν©λλ€. Native codeλ heapμ΄ μλ λ©λͺ¨λ¦¬μ μ½λ μΊμμ μ μ₯λ©λλ€. μ΄λ¬ν λ°©μμΌλ‘ Hotspot VMμ μ½λλ₯Ό μ»΄νμΌνλ λ° κ±Έλ¦¬λ μΆκ° μκ°κ³Ό ν΄μλ μ½λλ₯Ό μ€ννλ λ° κ±Έλ¦¬λ μΆκ° μκ°μ μ μΆ©νλ κ°μ₯ μ μ ν λ°©λ²μ μ ννλ €κ³ ν©λλ€.
Method Area
λ©μλ μμμ λ€μκ³Ό κ°μ ν΄λμ€λ³ μ 보λ₯Ό μ μ₯ν©λλ€.
Classloader Reference
Run Time Constant Poll
Numertic constants
Field references
Method References
Attributes
Field data
Per filed
Name
Type
Modifiers
Attributes
Method data
Per method
Name
Return Type
Parameter Types (in order)
Modifiers
Attributes
Method code
Per method
Bytecodes
Operand stack size
Local variable size
Local variable table
Exception table
Per exception handler
Start point
End point
PC offset for handler code
Constant pool index for exception class being caught
λͺ¨λ μ€λ λλ λμΌν λ©μλ μμμ 곡μ νλ―λ‘ λ©μλ μμ λ°μ΄ν°μ λν μ‘μΈμ€μ λμ μ°κ²° νλ‘μΈμ€λ thread safeν΄μΌ ν©λλ€. λ μ€λ λκ° μμ§ λ‘λλμ§ μμ ν΄λμ€μ νλλ λ©μλμ μ‘μΈμ€νλ €κ³ μλνλ κ²½μ° ν λ²λ§ λ‘λν΄μΌ νλ©° λ μ€λ λ λͺ¨λ λ‘λλ λκΉμ§ μ€νμ κ³μν΄μλ μ λ©λλ€.
Class File Structure
μ»΄νμΌλ ν΄λμ€ νμΌμ λ€μ κ΅¬μ‘°λ‘ κ΅¬μ±λ©λλ€.
magic, minor_version, major_version
magic, minor_version, major_versionμ ν΄λμ€ λ²μ λ° μ΄ ν΄λμ€κ° μ»΄νμΌλ JDK λ²μ μ λν μ 보λ₯Ό μ§μ ν©λλ€.
constant_pool
Symbol ν μ΄λΈκ³Ό μ μ¬νμ§λ§ λ λ§μ λ°μ΄ν°λ₯Ό ν¬ν¨νκ³ μλ€ . μ΄μ λν΄μλ μλμμ μμΈν μ€λͺ ν©λλ€.
access_flags
μ΄ ν΄λμ€μ λν μμ μ listλ₯Ό μ 곡ν©λλ€.
this_class
μ΄ ν΄λμ€μ μ κ·νλ μ΄λ¦(μ: org/jamesdbloom/foo/Bar)μ μ 곡νλ constant_poolμ λν μΈλ±μ€
super_class
μμ ν΄λμ€ (μ¦, java/lang/Object)μ λν symbolic μ°Έμ‘°λ₯Ό μ 곡νλ constant_poolμ λν μΈλ±μ€
interfaces
ꡬνλ λͺ¨λ μΈν°νμ΄μ€μ λν symbolic μ°Έμ‘°λ₯Ό μ 곡νλ constant_poolμ λν μΈλ±μ€ λ°°μ΄.
fields
κ° νλμ λν μμ ν μ€λͺ μ μ 곡νλ constant_poolμ λν μΈλ±μ€ λ°°μ΄.
methods
κ° λ©μλ μκ·Έλμ²μ λν μμ ν μ€λͺ μ μ 곡νλ constant_poolμ λν μΈλ±μ€ λ°°μ΄, λ©μλκ° abstract λλ nativeκ° μλ κ²½μ° λ°μ΄νΈμ½λλ μ‘΄μ¬ν©λλ€.
attributes
RetentionPolicy.CLASS λλ RetentionPolicy.RUNTIMEμ΄ μλ annotaionsμ ν¬ν¨νμ¬ ν΄λμ€μ λν μΆκ° μ 보λ₯Ό μ 곡νλ λ€μν κ°μ λ°°μ΄
javap λͺ λ Ήμ μ¬μ©νμ¬ μ»΄νμΌλ Java ν΄λμ€μ λ°μ΄νΈ μ½λλ₯Ό λ³Ό μ μμ΅λλ€.
λ€μκ³Ό κ°μ κ°λ¨ν ν΄λμ€λ₯Ό μ»΄νμΌνλ κ²½μ°:
κ·Έλ° λ€μ μ€ννλ©΄ λ€μκ³Ό κ°μ κ²°κ³Όκ° λνλ©λλ€
μ΄ ν΄λμ€ νμΌμ μμ ν, μμ±μ λ° sayHello λ©μλμ μΈ κ°μ§ μ£Όμ μΉμ μ 보μ¬μ€λλ€.
Constatn Pool - μ΄λ symbol ν μ΄λΈμ΄ μΌλ°μ μΌλ‘ μ 곡νλ κ²κ³Ό λμΌν μ 보λ₯Ό μ 곡νλ©° μλμμ μμΈν μ€λͺ ν©λλ€
Methods β κ°κ° λ€ κ°μ§ μμ ν¬ν¨:
signature and access flags
byte code
LineNumberTable - μ΄κ²μ λλ²κ±°μ μ 보λ₯Ό μ 곡νμ¬ μ΄λ€ μ€μ΄ μ΄λ€ λ°μ΄νΈ μ½λ λͺ λ Ήμ΄μ ν΄λΉνλμ§ νμν©λλ€. μλ₯Ό λ€μ΄ Java μ½λμ 6λ² μ€μ sayHello λ©μλμ λ°μ΄νΈ μ½λ 0μ ν΄λΉνκ³ 7λ² μ€μ λ°μ΄νΈ μ½λ 8μ ν΄λΉν©λλ€.
LocalVariableTable - μ΄κ²μ frameμ μ 곡λ λͺ¨λ μ§μ λ³μλ₯Ό λμ΄ν©λλ€. λ μμ μμ μ μΌν μ§μ λ³μλ thisμ λλ€.
λ€μ λ°μ΄νΈ μ½λ νΌμ°μ°μλ μ΄ ν΄λμ€ νμΌμμ μ¬μ©λ©λλ€.
aload_0
μ΄ opcodeλ
aload_<n>
νμμ opcode κ·Έλ£Ή μ€ νλμ λλ€. κ·Έλ€μ λͺ¨λ κ°μ²΄ μ°Έμ‘°λ₯Ό νΌμ°μ°μ μ€νμ λ‘λν©λλ€.<n>
μ μ‘μΈμ€λκ³ μμ§λ§ 0, 1, 2 λλ 3λ§ λ μ μλ λ‘컬 λ³μ λ°°μ΄μ μμΉλ₯Ό ββλνλ λλ€. κ°μ²΄ μ°Έμ‘°iload_<n>
μλ κ°μ λ‘λνκΈ° μν λ€λ₯Έ μ μ¬νlload_<n>
,float_<n>
λ°dload_<n>
μ΄ opcodeκ° μμ΅λλ€. μ¬κΈ°μi
λint
μ©,l
μlong
μ©,f
λfloat
μ©,d
λdouble
μ©μ λλ€. μΈλ±μ€κ° 3λ³΄λ€ λμ μ§μ λ³μλiload
,lload
,float
,dload
λ°aload
λ₯Ό μ¬μ©νμ¬ λ‘λν μ μμ΅λλ€. μ΄λ¬ν opcodeλ λͺ¨λ λ‘λν λ‘컬 λ³μμ μΈλ±μ€λ₯Ό μ§μ νλ λ¨μΌ νΌμ°μ°μλ₯Ό μ¬μ©ν©λλ€.
ldc
μ΄ opcodeλ λ°νμ μμ νμμ νΌμ°μ°μ μ€νμΌλ‘ μμλ₯Ό νΈμνλ λ° μ¬μ©λ©λλ€.
getstatic
μ΄ opcodeλ λ°νμ μμ νμ λμ΄λ μ μ νλμμ νΌμ°μ°μ μ€νμΌλ‘ μ μ κ°μ νΈμνλ λ° μ¬μ©λ©λλ€.
invokespecial
, invokevirtual
μ΄λ¬ν opcodeλ
invokedynamic
,invokeinterface
,invokespecial
,invokestatic
,invokevirtual
κ³Ό κ°μ λ©μλλ₯Ό νΈμΆνλ opcode κ·Έλ£Ήμ μμ΅λλ€. μ΄ ν΄λμ€ νμΌμμ invokespecial λ°invokevirutal
μ΄ λͺ¨λ μ¬μ©λ©λλ€. μ΄λ€ κ°μ μ°¨μ΄μ μinvokevirutal
μ΄ κ°μ²΄μ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ©μλλ₯Ό νΈμΆνλ€λ κ²μ λλ€.invokespecial
λͺ λ Ήμ΄λ νμ¬ ν΄λμ€μ μνΌν΄λμ€μ λ©μλ λ° μ μ© λ©μλλΏλ§ μλλΌ μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλλ₯Ό νΈμΆνλ λ° μ¬μ©λ©λλ€.
return
μ΄ opcodeλ
ireturn
,lreturn
,freturn
,dreturn
,areturn
λ° return opcode κ·Έλ£Ήμ μμ΅λλ€. κ° opcodeλi
κ°int
,l
μ΄long
,f
κ°float
,d
κ°double
,a
κ° κ°μ²΄ μ°Έμ‘°μΈ λ€λ₯Έ νμ μ λ°ννλ typed return λ¬Έμ λλ€.
μΌλ°μ μΈ λ°μ΄νΈ μ½λμμμ κ°μ΄ λλΆλΆμ νΌμ°μ°μλ λ€μκ³Ό κ°μ΄ λ‘컬 λ³μ, νΌμ°μ°μ μ€ν λ° λ°νμ μμ νκ³Ό μνΈ μμ©ν©λλ€.
μμ±μλ λ κ°μ λͺ
λ Ήμ κ°μ§κ³ μλ€. λ¨Όμ this
νΌμ°μ°μ μ€νμΌλ‘ νΈμνκ³ λ€μμΌλ‘ μνΌ ν΄λμ€μ μμ±μκ° νΈμΆλμ΄ this
μμ κ°μ μλΉνλ―λ‘ νΌμ°μ°μ μ€νμμ κΊΌλ
λλ€.
sayHello() λ©μλλ μμμ μμΈν μ€λͺ
ν κ²μ²λΌ λ°νμ μμ νμ μ¬μ©νμ¬ μ€μ μ°Έμ‘°μ λν symbolic μ°Έμ‘°λ₯Ό ν΄κ²°ν΄μΌ νλ―λ‘ λ 볡μ‘ν©λλ€. 첫 λ²μ§Έ νΌμ°μ°μ getstatic
μ System
ν΄λμ€μ μ μ νλ out
μ λν μ°Έμ‘°λ₯Ό νΌμ°μ°μ μ€νμΌλ‘ νΈμνλ λ° μ¬μ©λ©λλ€. λ€μ νΌμ°μ°μ ldc
λ λ¬Έμμ΄ "Hello"
λ₯Ό νΌμ°μ°μ μ€νμ νΈμν©λλ€. λ§μ§λ§ νΌμ°μ°μ invokevirtual
μ μΈμλ‘ νΌμ°μ°μ μ€νμμ "Hello"
λ₯Ό κΊΌλ΄κ³ νμ¬ μ€λ λμ λν μ νλ μμ λ§λλ System.out
μ println
λ©μλλ₯Ό νΈμΆν©λλ€.
Faster Class Loading
ν΄λμ€ λ°μ΄ν° 곡μ (CDS)λΌλ κΈ°λ₯μ΄ HotSpot JMV λ²μ 5.0λΆν° λμ λμμ΅λλ€. JVM μ€μΉ νλ‘μΈμ€ μ€μ μ€μΉ νλ‘κ·Έλ¨μ (rt.jarμ κ°μ) μ£Όμ JVM ν΄λμ€ μ§ν©μ λ©λͺ¨λ¦¬ λ§€νλ 곡μ μμΉ΄μ΄λΈλ‘ λ‘λν©λλ€. CDSλ μ΄λ¬ν ν΄λμ€λ₯Ό λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ μ€μ¬ JVM μμ μλλ₯Ό κ°μ νκ³ μ΄λ¬ν ν΄λμ€λ₯Ό JVMμ μλ‘ λ€λ₯Έ μΈμ€ν΄μ€ κ°μ 곡μ ν μ μλλ‘ νμ¬ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ λλ€.
Where Is The Method Area
JVM(Java Virtual Machine) μ¬μ Java SE 7 Editionμλ "λ©μλ μμμ΄ λ Όλ¦¬μ μΌλ‘ heapμ μΌλΆμ΄μ§λ§ κ°λ¨ν ꡬνμμλ garbage collect λλ μμΆμ μ ννμ§ μμ μ μμ΅λλ€. ". Oracle JVMμ© jconsoleκ³Ό λ¬λ¦¬ λ©μλ μμ(λ° μ½λ μΊμ)μ΄ non-heap μλ κ²μΌλ‘ νμλ©λλ€. OpenJDK μ½λλ CodeCacheκ° ObjectHeapμ λν VMμ λ³λμ νλμμ 보μ¬μ€λλ€.
Classloader Reference
λ‘λλλ λͺ¨λ ν΄λμ€μλ μ΄λ₯Ό λ‘λν ν΄λμ€ λ‘λμ λν μ°Έμ‘°κ° ν¬ν¨λ©λλ€. κ·Έλ¦¬κ³ ν΄λμ€ λ‘λμλ λ‘λν λͺ¨λ ν΄λμ€μ λν μ°Έμ‘°λ ν¬ν¨λ©λλ€.
Run Time Constant Pool
JVMμ λ λ§μ λ°μ΄ν°λ₯Ό ν¬ν¨νμ§λ§ symbol ν μ΄λΈκ³Ό μ μ¬ν λ°νμ λ°μ΄ν° κ΅¬μ‘°μΈ νμ λ³ μμ νμ μ μ§ν©λλ€. Javaμ λ°μ΄νΈ μ½λμλ λ°μ΄ν°κ° νμνλ©°, μ’ μ’ μ΄ λ°μ΄ν°λ λ°μ΄νΈ μ½λμ μ§μ μ μ₯νκΈ°μλ λ무 ν½λλ€. λμ μμ νμ μ μ₯λκ³ λ°μ΄νΈ μ½λμλ μμ νμ λν μ°Έμ‘°κ° ν¬ν¨λ©λλ€. λ°νμ μμ νμ μμμ μ€λͺ ν λλ‘ λμ μ°κ²°μ μ¬μ©λ©λλ€.
λ€μμ ν¬ν¨νμ¬ μ¬λ¬ νμ μ λ°μ΄ν°κ° μμ νμ μ μ₯λ©λλ€.
numeric literals
string literals
class references
field references
method references
μλ₯Ό λ€μ΄ λ€μ μ½λ:
λ€μκ³Ό κ°μ΄ λ°μ΄νΈ μ½λλ‘ μμ±λ©λλ€.
new
opcode(νΌμ°μ°μ μ½λ) λ€μμλ #2
νΌμ°μ°μκ° μ΅λλ€. μ΄ νΌμ°μ°μλ μμ νμ λν μΈλ±μ€μ΄λ―λ‘ μμ νμ λ λ²μ§Έ νλͺ©μ μ°Έμ‘°ν©λλ€. λ λ²μ§Έ νλͺ©μ ν΄λμ€ μ°Έμ‘°μ΄λ©°, μ΄ νλͺ©μ κ°μ΄ // Class java/lang/Object
μΈ μμ UTF8 string
λ‘ ν΄λμ€ μ΄λ¦μ ν¬ν¨νλ μμ νμ λ€λ₯Έ νλͺ©μ μ°¨λ‘λ‘ μ°Έμ‘°ν©λλ€. κ·Έλ° λ€μ μ΄ symbolic λ§ν¬λ₯Ό μ¬μ©νμ¬ java.lang.Object
μ λν ν΄λμ€λ₯Ό μ‘°νν μ μμ΅λλ€. new
opcodeλ ν΄λμ€ μΈμ€ν΄μ€λ₯Ό λ§λ€κ³ ν΄λΉ λ³μλ₯Ό μ΄κΈ°νν©λλ€. κ·Έλ° λ€μ μ ν΄λμ€ μΈμ€ν΄μ€μ λν μ°Έμ‘°κ° νΌμ°μ°μ μ€νμ μΆκ°λ©λλ€. κ·Έλ° λ€μ dup
opcodeλ νΌμ°μ°μ μ€νμμ μμ μ°Έμ‘°μ μΆκ° 볡μ¬λ³Έμ μμ±νκ³ μ΄λ₯Ό νΌμ°μ°μ μ€νμ μ΅μμμ μΆκ°ν©λλ€. λ§μ§λ§μΌλ‘ μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλλ invokespecial
μ μν΄ 2νμμ νΈμΆλ©λλ€. μ΄ νΌμ°μ°μλ μμ νμ λν μ°Έμ‘°λ ν¬ν¨ν©λλ€. μ΄κΈ°ν λ©μλλ λ©μλμ λν μΈμλ‘ νΌμ°μ°μ νμμ μ΅μμ μ°Έμ‘°λ₯Ό μλΉ(ν)ν©λλ€. λ§μ§λ§μλ μμ±λκ³ μ΄κΈ°νλ μ κ°μ²΄μ λν νλμ μ°Έμ‘°κ° μμ΅λλ€.
λ€μκ³Ό κ°μ κ°λ¨ν ν΄λμ€λ₯Ό μ»΄νμΌνλ κ²½μ°:
μμ±λ ν΄λμ€ νμΌμ μμ νμ λ€μκ³Ό κ°μ΅λλ€.
μμ νμλ λ€μ μ νμ΄ ν¬ν¨λ©λλ€
Integer
4λ°μ΄νΈ int μμ
Long
8λ°μ΄νΈ long μμ
Float
4λ°μ΄νΈ float μμ
Double
8λ°μ΄νΈ double μμ
String
μ€μ λ°μ΄νΈλ₯Ό ν¬ν¨νλ μμ νμ λ€λ₯Έ Utf8 νλͺ©μ κ°λ¦¬ν€λ λ¬Έμμ΄ μμ
Utf8
Utf8λ‘ μΈμ½λ©λ λ¬Έμ μνμ€λ₯Ό λνλ΄λ λ°μ΄νΈ μ€νΈλ¦Ό
Class
λ΄λΆ JVM νμμ μ κ·νλ ν΄λμ€ μ΄λ¦μ ν¬ν¨νλ μμ νμ λ€λ₯Έ Utf8 νλͺ©μ κ°λ¦¬ν€λ ν΄λμ€ μμ(λμ μ°κ²° νλ‘μΈμ€μμ μ¬μ©λ¨)
NameAndType
μμ νμ λ€λ₯Έ νλͺ©μ κ°κ° κ°λ¦¬ν€λ μ½λ‘ μΌλ‘ ꡬλΆλ κ° μμ λλ€. 첫 λ²μ§Έ κ°(μ½λ‘ μ)μ λ©μλ λλ νλ μ΄λ¦μΈ Utf8 λ¬Έμμ΄ νλͺ©μ κ°λ¦¬ν΅λλ€. λ λ²μ§Έ κ°μ μ νμ λνλ΄λ Utf8 νλͺ©μ κ°λ¦¬ν΅λλ€. νλμ κ²½μ° μ κ·νλ ν΄λμ€ μ΄λ¦μ΄κ³ λ©μλμ κ²½μ° λ§€κ°λ³μλΉ νλμ μ κ·νλ ν΄λμ€ μ΄λ¦ listμ λλ€.
Fielddref, Methodref, InterfaceMethodref
μμ νμ λ€λ₯Έ νλͺ©μ κ°κ° κ°λ¦¬ν€λ μ μΌλ‘ ꡬλΆλ κ° μμ λλ€. 첫 λ²μ§Έ κ°(μ μ)μ ν΄λμ€ νλͺ©μ κ°λ¦¬ν΅λλ€. λ λ²μ§Έ κ°μ NameAndType νλͺ©μ κ°λ¦¬ν΅λλ€.
Exception Table
μμΈ ν μ΄λΈμ λ€μκ³Ό κ°μ μμΈλ³ νΈλ€λ¬ μ 보λ₯Ό μ μ₯ν©λλ€.
μμμ
μ’ μ
ν΄λ€λ¬ μ½λμ PC offset
catchλλ μμΈ ν΄λμ€μ λν μμ ν μΈλ±μ€
λ©μλκ° try-catch λλ try-finally μμΈ μ²λ¦¬κΈ°λ₯Ό μ μν κ²½μ° μμΈ ν μ΄λΈμ΄ μμ±λ©λλ€. μ¬κΈ°μλ νΈλ€λ¬κ° μ μ©λλ λ²μ, μ²λ¦¬λλ μμΈ μ ν λ° νΈλ€λ¬ μ½λκ° μλ μμΉλ₯Ό ν¬ν¨νμ¬ κ° μμΈ νΈλ€λ¬ λλ finally λΈλ‘μ λν μ λ³΄κ° ν¬ν¨λ©λλ€.
μμΈκ° λ°μνλ©΄ JVMμ νμ¬ λ©μλμμ μΌμΉνλ νΈλ€λ¬λ₯Ό μ°Ύμ΅λλ€. μ무κ²λ μμΌλ©΄ λ©μλλ νμ¬ μ€ν νλ μμ κ°μκΈ° ννμ¬ μ’ λ£νκ³ μμΈλ νΈμΆ λ©μλ(μ νμ¬ νλ μ)μμ λ€μ throwλ©λλ€. λͺ¨λ νλ μμ΄ νλκΈ° μ μ μμΈ μ²λ¦¬κΈ°κ° λ°κ²¬λμ§ μμΌλ©΄ μ€λ λκ° μ’ λ£λ©λλ€. μλ₯Ό λ€μ΄ μ€λ λκ° κΈ°λ³Έ μ€λ λμΈ κ²½μ°μ κ°μ΄ λ°λͺ¬μ΄ μλ λ§μ§λ§ μ€λ λμμ μμΈκ° λ°μνλ©΄ JVM μμ²΄κ° μ’ λ£λ μλ μμ΅λλ€.
λ§μ§λ§μΌλ‘ μμΈ νΈλ€λ¬λ λͺ¨λ μ νμ μμΈμ μΌμΉνλ―λ‘ μμΈκ° λ°μν λλ§λ€ νμ μ€νλ©λλ€. μμΈκ° λ°μνμ§ μλ κ²½μ° λ©μλ λμμ finally λΈλ‘μ΄ μ¬μ ν μ€νλλ©°, μ΄λ return λ¬Έμ΄ μ€νλκΈ° μ§μ μ finally νΈλ€λ¬ μ½λλ‘ μ ννμ¬ λ¬μ±λ©λλ€.
Symbol Table
μ νλ³ λ°νμ μμ ν μΈμλ Hotspot JVMμλ permanent generationμ 보κ΄λ symbol ν
μ΄λΈμ΄ μμ΅λλ€. symbol ν
μ΄λΈμ symbolμ λν ν΄μ ν
μ΄λΈ λ§€ν symbol ν¬μΈν°(μ¦, Hashtable<Symbol*, Symbol>
)μ΄λ©° κ° ν΄λμ€μ λ°νμ μμ νμ μλ symbolλ₯Ό ν¬ν¨νμ¬ λͺ¨λ symbolμ λν ν¬μΈν°λ₯Ό ν¬ν¨ν©λλ€.
Reference countingμ symbol ν μ΄λΈμμ symbolκ° μ κ±°λλ μκΈ°λ₯Ό μ μ΄νλ ββλ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄ ν΄λμ€κ° μΈλ‘λλλ©΄ λ°νμ μμ νμ 보κ΄λ λͺ¨λ symbolμ μ°Έμ‘° νμκ° κ°μν©λλ€. symbol ν μ΄λΈμ μλ symbolμ μ°Έμ‘° νμκ° 0μ΄ λλ©΄ symbol ν μ΄λΈμ symbolμ΄ λ μ΄μ μ°Έμ‘°λμ§ μλλ€λ κ²μ μκ³ ν΄λΉ symbolμ΄ symbol ν μ΄λΈμμ μΈλ‘λλ©λλ€. symbol ν μ΄λΈκ³Ό λ¬Έμμ΄ ν μ΄λΈ(μλ μ°Έμ‘°) λͺ¨λμ λν΄ ν¨μ¨μ±μ λμ΄κ³ κ° νλͺ©μ΄ ν λ²λ§ νμλλλ‘ νκΈ° μν΄ λͺ¨λ νλͺ©μ΄ νμ€νλ νμμΌλ‘ μ μ§λ©λλ€.
Interned Strings (String Table)
Java μΈμ΄ μ¬μμμλ λμΌν μνμ€μ μ λμ½λ μ½λ ν¬μΈνΈλ₯Ό ν¬ν¨νλ λμΌν λ¬Έμμ΄ λ¦¬ν°λ΄μ΄ λμΌν String
μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν΄μΌ νλ€κ³ μꡬν©λλ€. λν String.intern()
μ΄ String
μ μΈμ€ν΄μ€μμ νΈμΆλλ©΄ stringμ΄ λ¦¬ν°λ΄μΈ κ²½μ° μ°Έμ‘° λ°νκ³Ό λμΌν μ°Έμ‘°κ° λ°νλμ΄μΌ ν©λλ€. λ°λΌμ λ€μμ΄ trueμ
λλ€.
Hotspot JVMμμ interned stringμ symbols(μ: Hashtable<oop, Symbol>
)μ λν Hashtable λ§€ν κ°μ²΄ ν¬μΈν°μΈ string ν
μ΄λΈμ 보κ΄λλ©° permanent generationμ 보κ΄λ©λλ€. symbol ν
μ΄λΈ(μ μ°Έμ‘°)κ³Ό string ν
μ΄λΈ λͺ¨λμ λν΄ ν¨μ¨μ±μ λμ΄κ³ κ° νλͺ©μ΄ ν λ²λ§ νμλλλ‘ νκΈ° μν΄ λͺ¨λ νλͺ©μ΄ νμ€νλ νμμΌλ‘ μ μ§λ©λλ€.
String 리ν°λ΄μ μ»΄νμΌλ¬μ μν΄ μλμΌλ‘ internedλκ³ ν΄λμ€κ° λ‘λλ λ symbol ν
μ΄λΈμ μΆκ°λ©λλ€. λν String
ν΄λμ€μ μΈμ€ν΄μ€λ String.intern()
μ νΈμΆνμ¬ λͺ
μμ μΌλ‘ interned
ν μ μμ΅λλ€. String.intern()
μ΄ νΈμΆλ λ symbol
ν
μ΄λΈμ μ΄λ―Έ λ¬Έμμ΄μ΄ ν¬ν¨λμ΄ μμΌλ©΄ this
μ λν μ°Έμ‘°κ° λ°νλκ³ κ·Έλ μ§ μμ κ²½μ° string
μ΄ string
ν
μ΄λΈμ μΆκ°λκ³ ν΄λΉ μ°Έμ‘°κ° λ°νλ©λλ€
Last updated
Was this helpful?