java原理
Java优点 :
简单、健壮、安全
跨平台、一次编写到处运行
高度优化 的虚拟机
缺点: 语法繁琐,无法直接操作硬件,GUI效果不佳
适用于:
web后端开发
andro APP开发
大数据应用开发
不适用于:
底层os开发
桌面 应用程序开发
桌面大型游戏开发
体系 :

最早是 SUN公司 James,Cosling为手持设备开发的嵌入式编程语言 。
版本 :
java SE: standard Edition
JAVA EE: Enterprise Edition
JAVA ME:Micro Edition

java的版本演进 :

java规范

java平台 :
JRE是JDK的一部分.

支持环境:
winxp-10,Mac OS x 10.x
Oracle JDK 1.8, Open JDK 1.8
Eclipse/ Intellij Idea/NetBeans
自己使用: win7,10 Oracle JDK 1.8, Eclipse
JVM: 看直播的JVM讲解

JAVA的GC:
自动垃圾回收.不然加载的类越来越多,heap有上限。
年青代:Young Generation
伊甸园Eden
生存区:Survivor:意思为幸存者,是新生代和老年代的缓冲区域。
伊甸园占满了触发GC,对对象做标记,看哪些在使用哪些没有使用,把没有使用删除掉。然后内存整理压缩
当年青代都站满后,就会触发GC,将生存区的都复制到老年代.
老年代:old Generation
老年带也就扛不住了(空间被用完),那就来次集体大扫除(Full GC)
持久代(元空间)
参考:https://www.jianshu.com/p/f36ca4e4bd10 GG
为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation)3个区域。

新生代
新生代由 Eden 与 Survivor Space(S0,S1)构成,大小通过-Xmn参数指定,Eden 与 Survivor Space 的内存大小比例默认为8:1,可以通过-XX:SurvivorRatio 参数指定,比如新生代为10M 时,Eden分配8M,S0和S1各分配1M。
Eden:希腊语,意思为伊甸园
大多数情况下,对象在Eden中分配,当Eden没有足够空间时,会触发一次Minor GC,虚拟机提供了-XX:+PrintGCDetails参数,告诉虚拟机在发生垃圾回收时打印内存回收日志。
Survivor:意思为幸存者,是新生代和老年代的缓冲区域。
当新生代发生GC(Minor GC)时,会将存活的对象移动到S0内存区域,并清空Eden区域,当再次发生Minor GC时,将Eden和S0中存活的对象移动到S1内存区域。
存活对象会反复在S0和S1之间移动,当对象从Eden移动到Survivor或者在Survivor之间移动时,对象的GC年龄自动累加,当GC年龄超过默认阈值15时,会将该对象移动到老年代,可以通过参数-XX:MaxTenuringThreshold 对GC年龄的阈值进行设置。
老年代
老年代的空间大小即-Xmx 与-Xmn 两个参数之差,用于存放经过几次Minor GC之后依旧存活的对象。当老年代的空间不足时,会触发Major GC/Full GC,速度一般比Minor GC慢10倍以上。
永久代
在JDK8之前的HotSpot实现中,类的元数据如方法数据、方法信息(字节码,栈和变量大小)、运行时常量池、已确定的符号引用和虚方法表等被保存在永久代中,32位默认永久代的大小为64M,64位默认为85M,可以通过参数-XX:MaxPermSize进行设置,一旦类的元数据超过了永久代大小,就会抛出OOM异常。
虚拟机团队在JDK8的HotSpot中,把永久代从Java堆中移除了,并把类的元数据直接保存在本地内存区域(堆外内存),称之为元空间。
浙公网安备 33010602011771号