Java hello world 确实就要占用 30M

64 天前
 javak

最近看了几个帖子都是说 java 内存的, 自己也写 java , 还从来没关注过一个 hello world, 今天一时兴起测试了下,确实需要占用 30 。

测试方法和代码如下:

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("hello memory 02");
        Thread.sleep(60 * 60 * 1000);
    }
}

方式 1: 直接运行 java Main.java 。70M 内存

方式 2: 先编译,再运行: javac Main.java, 然后 java Main. 30M 内存

方式 3 编译成 jar 包在运行,java -jar main.jar 30M 内存。 编译的 maven 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>untitled</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

以上的 java 运行环境:

openjdk version "21.0.3" 2024-04-16 LTS
OpenJDK Runtime Environment Temurin-21.0.3+9 (build 21.0.3+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.3+9 (build 21.0.3+9-LTS, mixed mode, sharing)

如果觉得上面哪里测试有问题的,欢迎来拍。

一句话总结:Java 内存没救了,在意内存别用 Java 。

11438 次点击
所在节点    Java
113 条回复
thinkershare
63 天前
JVM 应该有很大一部分内存是可以和其它进程公用的,也就是你启动多个的时候,JVM 本身的二进制文件在内存中是和运行相同版本的 JVM 的进程共享同一份内存的,排除这部分内存,剩下的应该是 JVM 保留了一部分堆内存用来为接下来的对象分配预留。其实纠结这种问题没啥意义,Java 的使用场景大部分更不不在乎内存效率,开发者的成本远高于硬件的成本。
WIN2333
63 天前
菜就多练
b1iy
63 天前
我首次得出这结论的时候刚上大一
emmm 往事不堪回首
daysv
63 天前
java 这么多年不都这样。 不过居然比 v8 的 node 还多我是惊讶的。
rust 启动
photon006
63 天前
同时写 nestjs 、java spring 项目,java 确实占内存更多,但现在内存已经白菜价没必要纠结,公司机房服务器升级 256g 根本用不完,项目大了也是分布式架构不存在单机瓶颈。

要相信人比机器贵,花大量时间优化消耗的时间成本还不如直接升级硬件成本低。
GeekGao
63 天前
10 几年前写过几种语言与 java pk hello world 的内存文章,没想到还会有人这么干。
daysv
63 天前
@photon006 说是这么说, 你自己买云服务器玩的时候就又是另外一套说法了。
pcdd
63 天前
spb3.3.1 、oraclejdk21.0.3 、1 个 @GetMapping helloworld
idea 按钮运行,占用内存 135MB
mvn spring-boot:run 运行,占用内存 350MB
mvn spring-boot:start 运行,占用内存 169MB
topLangyu
63 天前
大货车确实油耗高。但电动货车局限性也挺多。
loryyang
63 天前
让我想起,十年前 hadoop 出来的时候,一哥们写文章锐评,单机部署 hadoop 之后,跑里面的排序样例代码太慢了
www5070504
63 天前
启动内存没啥意义吧 是不是应该关注一些对象的内存使用量 真被说的那些问题 大头肯定不是在启动内存上
Cheivin
63 天前
@wjx0912 #19 你有这么高速运转的机械进入中国,记住我给出的原理,小的时候。 作者:黑玫瑰 Blake https://www.bilibili.com/read/cv32698756/?jump_opus=1 出处:bilibili
Cheivin
63 天前
@Cheivin #52 哦豁,忘了删哔站的尾巴了
DOLLOR
63 天前
谁能想到 java 这个“内存大户”,当初可是设计给嵌入式小型设备用的
shuimugan
63 天前
内存便宜是作为个人设备而言的,到了生产环境内存就很昂贵了,特别是一个业务群一年下来的费用。
大家都说性能瓶颈不在语言而是在数据库层,既然这样,那应用层的配置从 8c 32g 砍到 8c 16g 行不行? 4c 8g 呢? 2c 4g 呢?真正做过资源分配和预算决策就懂了。

https://www.bilibili.com/video/BV1Qe411k7H6 .NET Conf China 2023 的分享,从 Java8 到 .NET8 ,团队升级工作汇报 》可以看下别人的历程,迁移完了服务器资源降低了 3/4 。等自己到了带团队做决策分配预算的位置,就会自然而然做出类似的决定,毕竟省下来的钱自己人分掉不香吗。
haython
63 天前
我的 Windows 电脑,一开机就占用了 8G 内存,我的 debian 服务器才用 500M ,总结一句话:Windows 内存没救了,在意内存的别用 Windows
haython
63 天前
@shuimugan 这种项目,就算重新用 java8 再写一遍,也能降低服务器资源,并不是用.NET8 的原因
zzhaolei
63 天前
阿里云服务,x86 计算型 c7 ,2c4g ,100mbps ,一年是八万零四百三十二。这只是一台服务器的价格,2c/4g 能支持 Java 用 Spring 流畅的扛住高并发吗?所以内存真的不值钱?

Java 不得上个几十上百台机器?每台一年 8 万块,这得多少钱?所以内存真的不值钱?
tywtyw2002
63 天前
有没有人出个总结,各种编程语言 helloworld 都占用多少内存? 编译好的文件多大?
jadehare
63 天前
空载卡车跟汽车跑一米,说卡车油耗高没救了。我可以这么理解么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058120

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX