JAVA 性能调优

学习Java性能调优之前,我们必须得先了解Java中的内存分配:堆、栈、非堆 为了更好的说明这个问题,我们先看一个程序: package cn.bridgeli.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class Test { public void test() { List<Email> emails = new ArrayList<Email>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName(""); String url = ""; conn = DriverManager.getConnection(url, "", ""); pstmt = conn.prepareStatement(""); rs = pstmt.executeQuery(); Email email = null; while (rs.next()) { email = new Email(); email.setSubject(""); emails.add(email); } } catch (Exception e) { e.printStackTrace(); } finally { // close conn } } } 在这段代码中,那些哪些数据放在堆上,哪些数据放在栈上,又有哪些数据放在方法去呢?一言以蔽之:在方法中,“=”左边的值,全部放在栈上,占4个字节,而“=”右边的肯定就是放在堆上了,所以该段代码中像:emails、conn的变量都是放在栈上的,而我们 new 出来的全部放在了堆上,而方法区是没有放东西的,既然new 出来的Email是放在堆上的,那么Email中的这些变量又是放在哪呢? ...

March 29, 2015 · 2 min · 320 words · Bridge Li