Java内存模型|学习笔记

简介: 快速学习Java内存模型

开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:Java内存模型|】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24

Java内存模型


目录 一.内存模型

        二.Java中内存模型的划分

        三.调整内存


一.内存模型:

是否知道java中的内存划分

·是否有过具体工作经验,因在实际的开发中,若不调整内存,性能将会造成极大的浪费

·关于GC的解释操作

 关于内存,最直观的理解在于Runtime类中,这个类采用了单例设计模式,这个类中提供了内存信息的取得,以及系统的垃圾收集处理操作。

范例:取得默认的内存大小

package com. yootk. test;
public class TestMyDemo {
   public static void main(String[ ] args) {

Runtime run . Runtime .getRuntime() ; //取得Runtime类的对象

System. out. println("MAX_MEMORY= " + run. maxMemory());
System. out println("TOTAL_MEMORY= " + run. totalMemory());

System. out. println("FREE_ MEMORY= " + run. freeMemory());

}

}

MAX_ MEMORY =1372061696(1308M)

TOTAL_ MEMORY=92798976(88.5M)

FREE_ MEMORY = 91320352(小于88.5M)牵扯到部分系统的初始化操作,会占用一些内存空间

这三个方法返回值类型都是long,所以返回的数据单位都是字节。

二.Java中内存模型的划分

在Java里对于内存的空间可以划分为如下几点:

·伊甸园区:新生的对象都保存在此处,但是不一定这些新生对象会一直存活;

·此处也属于内存空间,是内存空间则一定会被占满,便会执行GC;

·旧生代区:如果对象发现其要一直使用,将进入到旧生代区,这属于二级回收保险;

·如果先执行GC,那么先清理伊甸园区,随后发现空间不足,继续清理旧生代区;

·永久区:永久区中的数据不会清除,即使程序中出现了“OutOfMemoryError”也不会清除

范例:直观的观察内存

package com .yootk. test;
public class TestMyDemo {
   public static void main(String[ ] args) {

Runtime run = Runtime .getRunt ime ( ) //取得Runtime类的对象

System. out. println("1.MAX_MEMORY= " + run. maxMemory());
System. out println("1.TOTAL_MEMORY= " + run. totalMemory());

System. out. println("1.FREE_ MEMORY= " + run. freeMemory());

System.out.println(“**************************************");

String str=““;
for (int x=0;x< 70000 ; x ++) {

str +=““;

       }

str =null ; //产生了垃圾
System. out. println("2.MAX_MEMORY= " + run. maxMemory());
System. out println("2.TOTAL_MEMORY= " + run. totalMemory());

System. out. println("2.FREE_ MEMORY= " + run. freeMemory());

System.out.println(“**************************************");

run.gc();
System. out. println("3.MAX_MEMORY= " + run. maxMemory());
System. out println("3.TOTAL_MEMORY= " + run. totalMemory());

System. out. println("3.FREE_ MEMORY= " + run. freeMemory());

}

}

三.调整内存

调整内存大小:-Xms2048M-Xmx2048M-Xmn1024M

“-Xms".初始分配的内存大小,默认为物理内存的64分之1,但是小于1G;
“-Xmx"最大分配内存,默认大小为物理内存的4分之1,但是小于1G; .
“-Xmn":设置年轻代(伊甸园区)的堆内存大小:,
只有调整之后才可以保证系统内存会得到提升,这样即可发挥出电脑的性能,因为默认的较小

 

 

相关文章
|
17天前
|
存储 Java 编译器
Java内存模型(JMM)深度解析####
本文深入探讨了Java内存模型(JMM)的工作原理,旨在帮助开发者理解多线程环境下并发编程的挑战与解决方案。通过剖析JVM如何管理线程间的数据可见性、原子性和有序性问题,本文将揭示synchronized关键字背后的机制,并介绍volatile关键字和final关键字在保证变量同步与不可变性方面的作用。同时,文章还将讨论现代Java并发工具类如java.util.concurrent包中的核心组件,以及它们如何简化高效并发程序的设计。无论你是初学者还是有经验的开发者,本文都将为你提供宝贵的见解,助你在Java并发编程领域更进一步。 ####
|
27天前
|
缓存 easyexcel Java
Java EasyExcel 导出报内存溢出如何解决
大家好,我是V哥。使用EasyExcel进行大数据量导出时容易导致内存溢出,特别是在导出百万级别的数据时。以下是V哥整理的解决该问题的一些常见方法,包括分批写入、设置合适的JVM内存、减少数据对象的复杂性、关闭自动列宽设置、使用Stream导出以及选择合适的数据导出工具。此外,还介绍了使用Apache POI的SXSSFWorkbook实现百万级别数据量的导出案例,帮助大家更好地应对大数据导出的挑战。欢迎一起讨论!
144 1
|
12天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
33 6
|
16天前
|
存储 缓存 安全
Java内存模型(JMM):深入理解并发编程的基石####
【10月更文挑战第29天】 本文作为一篇技术性文章,旨在深入探讨Java内存模型(JMM)的核心概念、工作原理及其在并发编程中的应用。我们将从JMM的基本定义出发,逐步剖析其如何通过happens-before原则、volatile关键字、synchronized关键字等机制,解决多线程环境下的数据可见性、原子性和有序性问题。不同于常规摘要的简述方式,本摘要将直接概述文章的核心内容,为读者提供一个清晰的学习路径。 ####
35 2
|
17天前
|
存储 安全 Java
什么是 Java 的内存模型?
Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)规范的一部分,它定义了一套规则,用于指导Java程序中变量的访问和内存交互方式。
42 1
|
23天前
|
存储 运维 Java
💻Java零基础:深入了解Java内存机制
【10月更文挑战第18天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
28 1
|
26天前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
1月前
|
存储 监控 算法
Java中的内存管理与垃圾回收机制解析
本文深入探讨了Java编程语言中的内存管理方式,特别是垃圾回收机制。我们将了解Java的自动内存管理是如何工作的,它如何帮助开发者避免常见的内存泄漏问题。通过分析不同垃圾回收算法(如标记-清除、复制和标记-整理)以及JVM如何选择合适的垃圾回收策略,本文旨在帮助Java开发者更好地理解和优化应用程序的性能。
|
1月前
|
存储 Java
Java内存模型
【10月更文挑战第11天】Java 内存模型(JMM)是 Java 虚拟机规范中定义的多线程内存访问机制,解决内存可见性、原子性和有序性问题。它定义了主内存和工作内存的概念,以及可见性、原子性和有序性的规则,确保多线程环境下的数据一致性和操作正确性。使用 `synchronized` 和 `volatile` 等同步机制可有效避免数据竞争和不一致问题。
29 3
|
1月前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
38 2