By Thaina on Tag:

ช่วงนี้ใช้ Java บน GAE ครับ

และกำลังปวดกระโหลก กับการที่มันไม่มี struct ให้ใช้ ด้วยหลายๆเหตุผล

เลยอยากทราบว่า คนใช้ Java มีวิธีอะไรบ้างที่ใช้แทน User Defined ValueType เวลาที่อยู่ๆก็ต้องการจะใช้ขึ้นมา

ขอขอบคุณล่วงหน้าครับ

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

บางทีมันจะมีเหตุการณ์ไม่ปกติครับ เช่น

  • ต้องการให้มัน Copy by Value ทั้งคลาส
  • อยากสร้าง Array ที่มัน Packed
  • ต้องการ Performance ไม่ต้องการ indirection
  • ไม่อยากเช็ค null
  • ฯลฯ

ข้อแรกก็ .clone() เอาได้นี่ครับ ส่วนเรื่อง performance ถ้าคุณซีเรียสจุดนี้ ผมว่าไม่เหมาะตั้งแต่เขียน java แล้วล่ะครับ lol

ข้ออื่นๆ ผมไม่ทราบ ต้องให้เซียนชวามาตอบ

อย่าไปแคร์ Performance มากมายครับ คุณไม่ต้อง Optimize ในรายละเอียด เขียนตาม best practice ของ java ก็น่าจะทำให้ performance อยู่ในเกนณ์ที่รับได้นะครับ ผมเชื่อว่า ใช้ Class แทน struct ก็ไม่ได้ช้าลงมากมายครับ

ตอนนี้ผมใช้ GAE ครับ ยังฟรีอยู่

แต่ถ้าเกิดมีคนใช้มากๆ ก็กิน CPU Time ถ้าเกินก็ต้องเริ่มซื้อ Package และมันก็คิดตาม CPU Time ที่มากขึ้นด้วย

Performance เปนเงินเปนทองครับ

ฟังดูน่าสนใจ struct มันผิดหลักการ OOP อย่างไรครับ?

ในเมื่อ Java ก็ยังต้องมี Primitive และ C# ก็มี struct ให้ใช้ ก็ยังเปน OOP ได้

ถ้าบอกว่า struct มันผิดหลักการ OOP
แล้ว struct ใน C# ทำให้ C# ผิดหลักการ OOP อย่างไรได้บ้างครับ?
Primitive ใน Java ทำให้ Java ผิดหลักการ OOP อย่างไรบ้างครับ?

ถ้าผมจำไม่ผิด หลักการ OOP ก็จะมีหลักการของ Value Type อยู่ด้วยนะครับ

nant Sat, 07/05/2011 - 15:16

ไม่มีครับ ถ้าให้เหมือนที่สุดคือ class ที่ไม่มี method
แล้วถ้าจำไม่ผิด c ก็ไม่มี packed array เช่นกัน
หรือคำว่า packed array ของคุณ thaina หมายถึง a[n]?

สงสัยผมเรียกผิด หมายถึง อย่าง byte[] A = new byte[X] ธรรมดานี่แหละครับ

ก็คือ มันจอง memory ตรงๆ ขนาด X byte ไม่ใช่จอง address ไปที่ byte อีกที น่ะครับ

ปกติ reference to object น่าจะขนาด 4 byte

ถ้ามี object ขนาด 4 byte (เช่น IPAddress)

  • C# จอง Array struct รองรับ 256 connection == 1024 byte ก็ 1 KB + 4 byte(object array)
  • Java จอง Array class รองรับ 256 connection == 1024 byte ก็ 1 KB + จองข้อมูลกระจายใน Heap อีก 256 ตัว == 1 KB รวม 2 KB + 4 byte(object array)

struct ทั่วไปใน C# ขนาดของมันอยู่ในช่วงเฉลี่ย 4 - 16 byte
ที่ใหญ่จริงๆและมีคนใช้ประจำคือ 64 byte (Matrix)

Java ต่างกันไม่เยอะหรอกครับ แค่กินเมมมากขึ้นประมาณ ร้อยละ 50 กว่าที่ควรจะเปน แค่นั้นเอง

ยังไม่นับ Performance ที่เสียไป

  • จากการ indirection โสตหนึ่ง
  • จากการ allocate heap บ่อยๆ ทำให้เกิดช่องโหว่กระจายใน memory อีกโสตหนึ่ง
  • จากการที่ต้องให้ GC ดูแล object เล็กๆน้อยๆ เหล่านี้ ที่บางครั้งใช้งานแค่ครั้งเดียว อีกโสตหนึ่ง

เป็นข้อแตกต่าง(เสีย?)ของ Java ครับ

ปรับตัว ไม่ก็เลิกใช้ น่าจะเป็นสองวิธีที่ดีที่สุด
เพราะ Java ไม่ใช่ C# และ C# ก็ไม่ใช่ Java ครับ

คุณ thaina ไปดู benmark ระหว่าง C# กับ JAVA สิครับ  ในหลายๆการทดลอง JAVA เป็นรอง C++ เล็กน้อย สูสีกับ C# เลยทีเดียว 

ผมเข้าใจว่าคุณ thaina นิยม C# ซึ่งก็ไม่ผิดอะไรที่จะมีภาษาที่ชื่นชอบเป็นพิเศษ ทำให้มองภาษาที่เป็นคู่แข่งกันลบไปหน่อย (ผมเองก็แฟนบอย C++ ผมยังมอง D ในแง่ลบเลย แต่ผมก็เขียนได้นั่นแหละ)


อะนี่ครับ C# vs java

เปล่าเลยครับ มันไม่เกี่ยวหรอกว่าผมนิยมอะไร

แต่มันถึงจุดที่ มันคือสิ่งที่ควรจะต้องใช้แต่กลับไม่มีให้ใช้ ต่างหาก

Benchmark ในหลายๆการทดลอง มันก็คือ Field ที่ ผมไม่ได้ใช้ในเวลานี้(และคงไม่ต้องใช้)
และอีกหลายๆการทดลองที่ Benchmark มันแพ้รูดมหาราช ดันอยู่ใน Field ที่ผมกำลังอยากจะใช้

ซึ่งผมคงไม่ต้องมาทนฝืนใช้ ถ้าหากไม่ใช่เพราะอยู่ใน Platform ที่มันบังคับ

บอกอีกทีว่าผมกำลังใช้ GAE ซึ่งถ้าไม่ใช่ Java ก็ต้อง Python

และจากกระทู้นี้ก็ทำให้ผมตัดสินใจได้ว่า ถ้าใช้ GAE ต่อไป ควรจะไปตายเอาดาบหน้ากับ Python ดีกว่า
ไม่น่าเลือกเสี่ยงกับ Java แค่เพราะเห็นว่าเคยใช้มาบ้างเลย

Java มันก็รู้ทั้งรู้ ว่าตัวเองพยายามจะให้ทุกคนใช้ตัวเองในทุกๆที่
ทั้งมือถือทั้งอะไรที่ Spec ต่ำต้อย หรืองานหนักๆอย่าง Graphic หรือคำนวนวิทยาศาสตร์
แต่กลับพยายามตัดฟีเจอร์ที่มีผลกับ Performance ออกหมด แล้วมาบอกให้โปรแกรมเมอร์ทนเอา

ตั้งแต่สมัยที่ผมไม่คิดจะอวย C# ผมก็ยังคิดว่า Java กากส์
และตอนนี้ยิ่งมั่นใจ ว่าใครที่พูดว่า Java เร็วส์ คนนั้นกำลังหลอกลวงคนฟัง

ตั้งกระทู้นี้มาผมก็ตั้งใจจริงๆนะ ว่ามีใครจะบอกว่า Java มันมีวิธี Optimize กันบ้างหรือไม่

เอาจริงๆผมก็เห็นพวกเว็บต่างประเทศ เขาก็มีแนะนำให้ใช้ BitBuffer (ที่มาถามเพราะเผื่อใครจะมีเทคนิคอะไรดีกว่านั้น)
ซึ่งจริงๆมันก็คือทำ Array ของ struct แบบปลอมๆ แต่ประสิทธิภาพก็ยังต่ำกว่านิดหน่อย แถมความง่ายในการใช้งานต่างกันหลายขุม

คนที่เผยแพร่วิธีนี้บอกว่า ต้องออปติไมซ์โปรแกรมใน Server เพราะ Java แดกทรัพยากรมากเกินไป
พอเอาวิธีนี้มาใช้ ก็ดีขึ้นมาหลายเท่า

สรุปคือ Java มันตัดฟีเจอร์ดีๆออก "เพราะอยากให้คนใช้งานได้ง่าย"
แต่พอถึงขั้นที่ยังไงๆ ก็ต้องใช้ กลายเปนคนใช้ต้องเล่นท่ายาก แถมก็ไม่ได้เรื่องเท่าภาษาอื่นเขา

Java ควรจะละอายแก่ใจบ้างนะครับ ว่าเกิดมาก่อนกี่ปีแล้ว
เอามาอวดว่า ตั้งหลาย Benchmark ที่สูสีกับ C# น่าภูมิใจตรงไหนเนี่ย

สรุปก็แค่ขี้เกียจแก้ JVM ให้มันรองรับ struct
ดีแต่กินบุญเก่า แล้วก็อ้างข้างๆคูๆไปเรื่อย งานไม่ต้องมี Performance บ้างล่ะ (มือถือล่ะ?) รักษา OOP บ้างล่ะ (สุดท้ายก็ต้องมี Primitive อยู่ดี ก่อนหน้านี้ก็จำใจต้องเพิ่ม long เข้าในระบบ)

แล้วก็มาช่วยกันออกรับแทน ไม่แย่ขนาดนั้นหรอก ไม่ต้องใช้หรอก

สาวกยังไงก็เปนสาวกจริงๆ

ขอพูดอย่างสุดท้ายว่า

ผมเห็น Java มันก็พัฒนาอะไรๆ ตามคำเรียกร้องของคนใช้ OpenJDK มี Mailing List

แต่ในเมื่อมีแต่ผู้ใช้สาวกแบบนี้ SUN พูดว่าไม่ต้องใช้ struct ก็ชาบูว่า ดีแล้วๆ ไม่ต้องใช้ๆ

แล้วก็มาปลอบกันเอง "Performance ไม่ดี? ไม่ต้องห่วงๆ Java ไม่ห่วง Performance เขียนไปตามแนวคิดเขาก็พอ"

ชาติหน้าก็คงไม่มีให้ใช้ Performance ห่วยยังไงก็ได้ เพราะมันคือ Java

ขอบคุณครับ ที่ทำให้ผมได้ซาบซึ้งกับคำว่าสาวกอีกครั้งหนึ่ง

การทำ packed struct เป็นการ "ลด" performance ครับ แม้แต่ภาษา C ก็ไม่แนะนำให้ทำ ถ้าไม่มีความต้องการพิเศษเช่นการทำ binary compatible

การทำ VM ของทุกคนติดเพดานความเร็ว CPU ทั้งสิ้น ไม่มีใครสามารถทำ VM ให้เร็วกว่าความเร็ว CPU ได้ตัว Java เองมี JIT มาล่วงหน้าหลายปี ทำความเร็ว raw throughput ได้ใกล้เคียง CPU ในหลายๆ กรณี ถ้า VM อื่นๆ จะตามมาใกล้ ก็ไม่รู้จะหนีไปไหนครับ

รอบนี้ผมถือว่าคุณ "ลองของ" ผมที่พยายามใช้คำไม่สุภาพหลังจากผมแบนคุณไปหนึ่งสัปดาห์แล้ว

แบนหนึ่งเดือนครับ และนี่เป็นรอบสุดท้ายก่อนแบนถาวร

ผมเข้าใจว่าผมกำลังคุยเรื่องวิชาการนะครับ

คุณ thaina สงสัยเรื่อง performance ก็ต้องวัดกันสิครับ ว่าเทียบกันแล้วเป็นอย่างไร การที่ไม่มี struct ทำให้ประสิทธิภาพตกหรือเปล่า ? คำตอบคือไม่ค่อยตกเมื่อเทียบกับ C#

ส่วนเร้องสาวกไม่สาวกนั้น? ผมไม่ได้ตำหนิคุณหรือเหยียดใครว่าเป็นสาวกแล้วไม่ดี เพราะผมก็สาวก C/C++ นั่นแหละครับ ผมไม่ได้ออกรับแทนจาวา (คุณน่าจะรู้ว่าสาวกภาษาเนทีฟมีมุมมองอย่างไรกับ ภาษาบน VM นะ) ผมแค่ต้องการคุยกับคุณ เรื่องจาวา

ตอบ จขกท ... ทำ class ปกติ
แต่ไม่ต้องใช้ method แล้ว reference แบบ package-protected
(define แบบไม่ใส่ public/private/protect)

หรือถ้าจะให้ advanced กว่านี้ รอ java7 ครับ ...

ลองสร้าง Annotation ไปกำกับ Class ให้มีพฤติกรรมคล้ายๆ struct พอจะได้มั๊ยครับ ทำคล้ายๆเวลาจะกำหนด struct alignment บน C# นะครับ

หรือไม่ก็ ใช้พวก Serialize/Externalize Interface เข้าช่วย

Java ไม่มี Value Type ที่ User สร้างเองได้ครับ ถ้าเทียบกับ C# นะ

เขาตัด Feature ที่ดูแล้วซ้ำซ้อน ไม่มีความจำเป็น ทิ้งได้ก็ทิ้ง เพื่อให้เป็นภาษาที่เรียบง่ายและเข้าใจได้ง่ายครับ Performance เป็นเรื่องรอง (ถ้ามันคอขาดบาดตายจริง ก็เขียน Native Code แล้วต่อด้วย JNI)

ส่วนตัว ผมเห็นด้วยกับคุณ Thaina เขาก็มาถามดีๆ ผมว่าไม่แรง ถ้าคุยกันด้วยเหตุผล
และไม่ควรไป ban เขาด้วยคุณ lew ควรพิจารณาตัวเองครับ ผมว่าคุณ lew ทำเพื่อความสะใจมากกว่า
ถ้าจะ ban ผมอีกคนก็ไม่ว่าครับ

ขอบคุณครับ

ผมว่าที่ถูกแบนก็เพราะว่าพูดจาเข้าข่ายดูถูกคนอื่นน่ะครับ ไม่มั่นใจเหมือนกัน รอคุณ ๆ ทั้งสองมาแถลงอีกที

เท่าๆที่อ่านไอ้ที่เขาดูถูกก็มีแค่.... java ? แล้วที่เขาเหวี่ยงนิดๆหน่อยก็สมเหตุสมผลด้วย เพราะว่าไอ้ที่บ่นๆน่ะเพราะว่าแต่ละคำตอบก็คือ "ทนๆไปเถอะ ก็จาวามันเป็นแบบเนี้ย", กับ "มันจะมีผลอะไรมาก". ทั้งที่เขาก็บอกเหตุผลมาแล้วว่าทำไมต้อง optimize ถึงลูกถึงคนขนาดนั้น....

ปล. ผมสาวกไพธอน ถึงจะกินแรมแต่ก็รักนะ

ไปตายเอาดาบหน้า กากส์ เร็วส์ แดกทรัพยากร สาวกยังไงก็เปนสาวกจริงๆ ขอบคุณครับ ที่ทำให้ผมได้ซาบซึ้งกับคำว่าสาวกอีกครั้งหนึ่ง

ผมว่าแรงอยู่นะ

ถ้าให้เดาผมว่าโดนเพราะคำนี้นะครับ เพราะรู้สึกท่านไทนาเคยโดนเตือนเรื่องคำหยาบไปหลายทีแล้ว