JDK1.6、JDK1.7、JDK1.8 内存模型对比

JDK1.6、JDK1.7、JDK1.8 内存模型对比,第1张

如图25-1 是 JDK 16、17、18 的内存模型演变过程,其实这个内存模型就是 JVM 运行时数据区依照JVM虚拟机规范的具体实现过程。

JDK 16:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区[永久代](字符串常量池、静态变量、运行时常量池、类常量池)

JDK 17:程序计数器、Java虚拟机栈、本地方法栈、堆(字符串常量、静态变量)、方法区[永久代](运行时常量池、类常量池)

JDK 18:程序计数器、Java虚拟机栈、本地方法栈、堆(字符串常量)、元数据(静态变量、运行时常量池、类常量池)
JDK 18 JVM 的内存结构主要由三大块组成:堆内存、元空间和栈,Java 堆是内存空间占据最大的一块区域。

Java 堆,由年轻代和年老代组成,分别占据1/3和2/3。

年轻代又分为三部分, Eden 、 From Survivor 、 To Survivor ,占据比例为8:1:1,可调。

元空间从虚拟机Java堆中转移到本地内存,默认情况下,元空间的大小仅受本地内存的限制,说白了也就是以后不会因为永久代空间不够而抛出OOM异常出现了。 jdk18以前版本的 class和JAR包数据存储在 PermGen下面 ,PermGen 大小是固定的,而且项目之间无法共用,公有的 class,所以比较容易出现OOM异常。

升级JDK 18后,元空间配置参数,-XX:MetaspaceSize=512M XX:MaxMetaspaceSize=1024M。

小技巧通过jps、jinfo查看元空间,如下:

通过jinfo查看默认MetaspaceSize大小(约20M),MaxMetaspaceSize比较大。

其他:关于JDK18 元空间的介绍:  Move part of the contents of the permanent generation in Hotspot to the Java heap and the remainder to native memory >

解决办法:

在环境变量,path里面jdk的路径放在前面;

删除C:\Windows\System32 里面的3个文件 javaexe   javawexe  javawsexe。要是担心删除后出问题,可以先备份在其他地方;

在控制面板/程序卸载里面,把关于jdk18卸载了,再重装。我之前把18和17 装在同一个java目录下,后来换了个路径重组了18,不知道同java目录有没有影响;

重启电脑,以上方法都试过后,还是有问题,重启后,一起都雨过天晴了。

1)在系统变量里新建JAVA_HOME变量,变量值为:C:\Program Files\Java\jdk170_06
2)新建classpath变量,变量值为:;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib
3)在path变量(已存在不用新建)添加变量值(重点:在最前面添加):%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)
4、“开始”-->“运行”-->输入“javac”-->"Enter",如果能正常打印用法说明配置成功!
补充环境变量的解析:
JAVA_HOME:jdk的安装路径
classpath:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个""表示当前路径。
path:系统在任何路径下都可以识别java,javac命令。

第一步:在桌面找到计算机,右击计算机-属性-找到高级系统设置,
第二步:点击高级系统设置,会出现系统属性对话框,点击环境变量,
第三步:点击环境变量,出现对话框。在这里我们将添加配置3个变量的路径,分别是:
1、在系统变量里面,新建环境变量,变量名为:JAVA_HOME,路径为:C:\Program
Files\Java\jdk180_102,
2、在系统变量里面,新建环境变量,变量名为:CLASSPATH,路径写值为:;%JAVA_HOME%\lib\dtjar;%JAVA_HOME%\lib\toolsjar。必须记住,写一个路径后面再加上另一个路径的时候必须加一个
“分号;”,并且在英文状态下的分号,
3、最后,很重要的一步,不是新建变量。找到系统变量里面的Path编辑,在最前面加上安装jdk
17下bin的路径:C:\Program
Files\Java\jdk180_102\bin;
必须记住,在bin后面必须是英文状态下的
“分号;”。
4、完成以上的 *** 作步骤后,环境变量的配置已经全部弄好。现在将 *** 作运行有没有正确的配置好电脑的环境变量:
第1步:开始-找到运行-输入cmd,按下回车。会出现Dos下的界面(黑背景的对话框),光标闪动位置后面键盘输入:java
空格
-version,按下回车键后:会出现用户安装jdk的版本信息:
第2步:同样的方法,在后面输入:java,按下回车键,
第3步:照上一步同样的方法,在后面输入:javac,按下回车键:

做法
1安装所有的JDk:
Mac自带了的JDK6,安装在目录:/System/Library/Java/JavaVirtualMachines/160jdk/下。
JDK7,JDK8则需要自己到Oracle官网下载安装对应的版本。自己安装的JDK默认路径为:/Library/Java/JavaVirtualMachines/jdk180jdk
2 在用户目录下的bash配置文件bashrc中配置JAVA_HOME的路径:
export JAVA_6_HOME=/System/Library/Java/JavaVirtualMachines/160jdk/Contents/Home
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk170jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk180jdk/Contents/Home
export JAVA_HOME=$JAVA_7_HOME
3创建alias命令动态切换JAVA_HOME的配置
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk7='export JAVA_HOME=$JAVA_7_HOME'
alias jdk6='export JAVA_HOME=$JAVA_6_HOME'
验证
CNxnliu:Versions xnliu$ java -version
java version "160_65"
Java(TM) SE Runtime Environment (build 160_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 2065-b04-462, mixed mode)
CNxnliu:Versions xnliu$ jdk8
CNxnliu:Versions xnliu$ java -version
java version "180"
Java(TM) SE Runtime Environment (build 180-b132)
Java HotSpot(TM) 64-Bit Server VM (build 250-b70, mixed mode)
CNxnliu:Versions xnliu$


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10508966.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-09
下一篇2023-05-09

发表评论

登录后才能评论

评论列表(0条)

    保存